output.plline 1-2:
perl の所在地です。
line 3-4:
ファイル名をキーボードから入力します。キーボード入力は <STDIN> から取得し、変数 $filename に代入します。最後に、 chomp によって改行文字を削除します。 4 行目は次のように書いても同じです;
$filename = <STDIN>; chom $filename;
line 5:
変数 $filename に代入されているファイル名を、ファイルハンドル IN に結び付けます。 opne で結びつけたファイルハンドルとファイルは、 13 行目の close によって切断され、ファイルが閉じられます。
|| 以降は、ファイル・オープンが失敗した場合に実行されます。 die は後続の引数をモニタに表示してスクリプトの実行を終了します。 $! はシステムエラーメッセージを保存している特殊変数です。
line 6-7:
検索対象文字列をキーボードから入力します。キーボード入力は <STDIN> から取得し、変数 $pattern に代入します。最後に、 chomp によって改行文字を削除します。 4 行目は次のように書いても同じです;
$pattern = <STDIN>; chom $pattern;
line 8-12:
while 節で繰り返しを意味します。
8 行目の条件文が真であれば 9-11 行目のブロック内を実行します。偽であれば繰り返しを終了します。
line 8:
この行の条件文 (<IN>) は省略形です。省略しないで記述すると、 ($line = <IN>) となります。上のスクリプトでは代入するべき変数名が省略されていますが、このような場合は Perl では標準変数 $_ に代入される決まりになっています。この条件文は、ファイルハンドルから読み込めれば「真」、読み込めなければ「偽」と判断されます。
line 9-11:
if 節で条件分岐を意味します。
9 行目の条件文が真であれば 10 行目のブロック内が実行されます。
line 9:
この行の条件文 (/$pattern/) は省略形です。変数が省略されると標準変数が使われる約束ですので、省略しないで記述すると、 $_ = /$pattern/ となります。この行は、「変数 $_ に、変数 $pattern に対応するパターンが存在すれば真」であることを意味します。例えば $pattern に文字列 hogehoge が代入されていれば、 $_ に文字列 hogehoge が含まれていれば「真」、含まれていなければ「偽」を意味します。
line 10:
9 行目が真であれば実行される if ブロックです。今まで省略されていた変数である標準変数 $_ をモニタに表示します。特殊変数 $_ を省略しないで記述してみましょう;
while($_ = <IN>){
if ($_ =~ /$pattern/) {
print "line $.> $_";
}
}
特殊変数 $. は行番号を保存しています。
文字列 string にパターン pattern が含まれているかどうかを判定するための関係演算子は =~ です。一般には次のように用います;
string =~ /pattern/