output.pl
line 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/