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/
FC2> モビット