1. はじめに

1.1. コマンドでの使い方

perl -e 'perlのコード'
echo 'perlのコード' | perl




2. サンプルコード

2.1. htmlファイルからリンクを抜き出す

2.2. ファイルの各行左2文字を削って表示

2.3. カンマ区切りのデータを2次元配列として読み込む

3. 正規表現

3.1. 具体例

3.2. 正規表現で使われる文字

4. 特殊変数

5. 文法基礎

5.1. いきなり他人まかせ

 http://d.hatena.ne.jp/perlcodesample/20091226/1264257759
ここを読めばいいと思う。

5.2. 個人的に気になった点など

■myとlocal
 my=レキシカルスコープ
 →宣言されたサブルーチンのみでアクセス可
 →スコープから外れると破棄

 local=ダイナミックスコープ
 →サブルーチンから呼び出されたサブルーチンでもアクセス可
 →スコープから外れると破棄

■foreach
@array=(1,2,3,4,5);
foreach $i (@array){print $i}

■サブルーチン
sub sum{ ($p1,$p2)=@_; return $p1+$p2}
print sum(5,6);

■ファイル入出力
	open my $fh, '<', $file    #<は読み込みモード
	  or die "Cannot open '$file': $!";
	while(my $line = <$fh>) {    }
	close $fh;

  cf.ファイルからすべて読み込む場合は
	my @lines =;	#配列で読み込むと、各行が配列の要素になる
	my $content = join '',@lines;

■その他特徴的な文法
・一気に代入(リスト代入)
 →my ($num1,$num2) = ($num3,$num4);
・偽と扱われる値
 →undef/''/0/'0'
・定義されているか判定
 →defined $num;
・コマンドライン引数
 →my($file,$options)=@ARGV;
 →ひとつだけ取得は my $file = shift;

・unless文
・if,unlessの後置
 →print $num if $num > 3;

・配列やハッシュの指定要素のみ配列として取得
 →@select = @arry[1,3,4];
 →@select = @hash{'a','b','d'};
・配列各要素に操作をする($_は配列の各要素)
 →@mapped = map {$_ * 2} @array;
・条件に一致した要素のみ配列として取得
 →@select = grep { $_ =~ 'cat'} @array;

・演算子色々
	範囲演算子	:@a = ('A' .. 'X');	#大文字すべての配列を得る
	文字列リスト演算子	:my @st = qw(文字列1 文字列2 文字列3);
		もしくは  my @st = qw/cat dog mouse/;
		→クォーテーションとカンマが不要に
	.=		:文末に追加
	x=		:変数を繰り返す
			$ch = 10;
			print $x x= 2;
			> 1010
	&&=		:左辺がTRUEなら右辺を代入
	||=		:左辺がFALSEなら右辺を代入

・例外処理
	eval {
		#例外補足範囲
		#このなかでdie "ErrorMessage"として例外を投げた関数等を補足
		#最後の{にセミコロンが必要なことに注意
	};
	if($@) {
		#例外処理
		#$@に例外メッセージが入ってる
	}
・別のevalの意味→実行中に文字列を命令として、コンパイル実行
	my $num = 100;
	my $code = "print \"$num\n\"";  # 後で eval で実行する
	$num = 200;
	eval $code;  # 100
  →実用性としては、コマンドライン引数を命令として実行することだろう
  →SQLインジェンクション的なバグの原因に

・モジュール読み込みはuse
・Jcode.pmやJcode.plではなくencodeモジュールを使う


6. 分野別文法各論

6.1. 配列のリファレンスサンプル

#!/usr/bin/perl

my @index = ("映画名","監督");

#無名配列のリファレンス作成は[]
#→それを受ける変数の「$」movieに注意。movie自体もリファレンス
#配列のリファレンスは\@indexで取得
my $movie = [
	\@index,
	['ニューシネマパラダイス','ジュゼッペ・トルナトーレ'],
	['北北西に進路を取れ','アルフレッド・ヒッチコック'],
	['ライムライト  ','チャールズ・チャップリン']
];

#ダイレクトに2次元配列にアクセスするには$movie->[][]
print "$movie->[0][0]\t\t\t\t\t$movie->[0][1]";

#デリファレンスには@$movie
foreach my $i (@$movie){ print "$i->[0] \t\t\t $i->[1] \n"; }