output.plline: 1-2
Perl のパスを記述しています。
line: 3
ファイル memo.txt を、ファイルハンドル OUT に結合しています。以下、 8 行目の close まで、出力ファイル memo.txt はファイルハンドル OUT で扱います。
ファイルハンドルと結びつけるファイル名の先頭に「大なり記号」( > )が付いています。これは、当該ファイルが存在しなければ作成するように求めることになります。
|| 以降の文字列はファイルオープンに失敗した時の挙動です。
die "..." は、二重引用符内の文字列を表示して Perl を終了させます。
$! はシステムエラーメッセージが自動的に蓄えられる特殊な変数です。明示的に代入する事無く自動的に処理される変数を特殊変数と呼びます。
line 4:
モニタ(標準出力装置)に "Input Line; " と表示します。
line 5-9:
while 文の構文は、次のようになります。
while(条件文){
ブロック
} continue {
ブロック
}
条件文が真であれば(戻り値が 1 であれば) while ブロックが実行され、続いて continue ブロックを実行して、条件文の真偽判定へ戻ります。条件文が偽であれば、繰り返しを終了して次の文へ進みます。
このスクリプトでは continue ブロックを用いずに、次のように書いても同じ事です。
while(<STDIN>) {
print OUT "{$.} $_";
print " Next Line; ";
}
continue ブロックは、繰り返しからの脱出が必要な場合に、 next と併用することで威力を発揮します。[参照]
line: 5
条件文では、キーボード(標準入力装置)からの入力を扱うハンドル <STDIN> だけが記述してあります。このハンドルは、入力がなければ偽を返します。
このハンドルの文字列は、代入する変数が指定されていません。一般に、代入する変数を省略すると、自動的に標準変数 $_に代入されます。標準変数 $_ は、システムエラーメッセージ変数 $! と同じく特殊変数です。
明示的に変数を指定すると、次のように書きます;
while($line = <STDIN>) {
print OUT "$.: $line";
print "Next Line; ";
}
line 6:
函数 print は、直後にハンドル名を記述する事で、このハンドルが表す装置に出力します。今の場合は、ハンドル OUT はファイル memo.txt に結び付けられていますから、二重引用符内の文字列をファイル memo.txt に出力します。
出力内容は特殊変数が利用されています。一つは標準変数 $_ です。これは、 5 行目で省略された変数の変わりに用いられており、キーボード入力 <STDIN> が代入されています。
もう一つの特殊変数は $. です。これは、直前に利用したファイルハンドルから読み込んだ行数を蓄えています。
$_ | 標準変数。 |
$. | 行数変数。 |
$! | システムエラーメッセージ変数。 |
特殊変数は他にも沢山あり、上手く使うとスクリプトがとてもシンプルになります。シンプルなスクリプトは読み易く記述ミスが少ないので、大いに利用すべきです。
line: 7
次の行の入力を促す為に、モニタに " Next Line: " と出力します。
改行文字だけの場合を含めて、入力があれば 5 行目へ戻って繰り返します。
line: 10
close により、ファイルとファイルハンドルの結合を切断し、ファイルを閉じます。