last-modified: 12th/August/'01;
since: 1st/June/2001;
条件分岐と繰り返しの構文を見てきましたが、情報の入出力は標準装置であるキーボードとモニタに限られていました。ここでは、ファイルに対して情報を入出力できるように工夫しましょう。キーボード入力を <STDIN>
から取得していたことを思い出してください。
次のスクリプトは、キーボードから入力した文字列を、ファイルに出力(保存)します。
output.pl
>>
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: |
#!/usr/bin/perl #上の行では、 Perl のパスを記述してください。 open(OUT,">memo.txt") || die "memo.txt: $!"; print "Input Line; "; while(<STDIN>) { print OUT "{$.} $_"; } continue { print " Next Line; "; } close(OUT); |
3 行目でファイルをハンドル OUT
に結び付けて、 10 行目でこの結合を切って、ファイルを閉じています。
次に、シェルプロンプトからの実行例を示します。
シェル>>
1: 2: 3: 4: 5: 6: 7: 8: 9: |
% chmod +x output.pl % ./output.pl Input Line; こんにちは。 Next Line; Next Line; これは、ファイル入力のサンプルです。 Next Line; 終了する時は、 Ctrl + D です。 Next Line; ではさようなら。 Next Line; ^d% % |
1 行目で実行許可属性を与えることで、 2 行目ではコマンドとして実行しています。 output.pl
に実行許可属性を与えず、 perl output.pl
で実行しても同じことです。
このスクリプトには終了命令を用意しなかったので、 Ctrl + D
で強制終了させました。 8 行目の入力が強制終了です。モニタには
改行命令が入っていないので、シェルプロンプトが中と半端な所に入っていますが、ご愛嬌です(^^;
次に、 memo.txt
に正しく出力されたか見てみましょう。直接ファイルを開いても良いのですが、 cat
コマンドからファイルの中身を覗いてみましょう。
シェル>>
1: 2: 3: 4: 5: 6: 7: |
% cat memo.txt {1} こんにちは。 {2} {3} これは、ファイル入力のサンプルです。 {4} 終了する時は、 Ctrl + D です。 {5} ではさようなら。 % |
2 行目から 6 行目までが memo.txt
の中身です。 Perl スクリプトの特殊変数 $.
によって、行番号が自動的に付加されていることに注意してください。
ファイルへ出力する方法を紹介しました。出力先をモニタではなく、ファイルにするには、ファイルをファイルハンドルに結びつけることで実現しました。
次は、情報の入力をキーボードからではなく、ファイルからにする方法を紹介します。ここでも、ファイルハンドルとファイルを結び付けます。
「ファイル・ハンドル」とは、「ファイルを摘み上げるためのハンドル」です。このハンドルでファイルを摘み上げ、 Perl の実行環境に1行ずつ入出力します。
本節までで、入力用ファイル・ハンドル、出力用ファイル・ハンドル、標準入力ファイル・ハンドル STDOUT
を紹介しました。ここでは、以上を踏まえて、ファイル・ハンドルについてまとめておきます。