File operation
ファイル操作

10章

10.7節,for より foreach を使うほうが perl らしい書き方.

10.9節,論理演算子 "&&""||" は C 言語と同様.ショートカットが行われることに注意. これが「制御構造」の章に演算子の内容が書いてある理由である.

11章 ファイル

11.1 標準入出力

<STDIN>,<STDOUT> など,自動的にオープンされている ファイルハンドルは,特別なことをしなくても利用できる. <STDIN> は標準入力,<STDOUT> は標準出力を示す. プログラムがキーボードから入力したり,ファイルから入力したりで きるように OS が入出力先を抽象化している.

デフォルトでは 標準入力 はキーボードに,標準出力 はディスプレイに 接続されている.コマンドラインで "<" や ">" 記号を使って接続先をファイルに変更することが できる.これは Unix の「シェル」の機能である.

p.122 のパターンテストプログラムを例に説明する. "<>" 演算子は(コマンドラインからファイル名が与えられない場 合は) STDIN から読み込みを行う."print" 文は,後述の ファイルハンドルが明記されない場合,STDOUT へ書き出す. p.122 のパターンテストプログラムは標準入力から読み出しを行い, 標準出力へ書き込むプログラムである.

Unix のシェルに対して "<" 記号を用いて標準入力を ファイルへ変更することができる.p.122 のパターンテストプログラム のファイル名が match.pl であれば,コマンドラインへ

% ./match.pl < indata

と入力することで標準入力をキーボードから indata という名前のファイルへ 切り換えることができる.上記コマンドを入力する前にキーボードから入力予 定であったものをそのまま書きこんだファイル indata をカレントディレクト リに作成し,実行してみよ.

">" 記号を用いて標準出力を ファイルへ変更することができる. コマンドラインへ

% ./match.pl < indata > outdata

と入力することで indata という名前のファイルから入力し, outdata という名前のファイルへ出力するように変更できる. 実行して確認せよ.

11.2 ファイルハンドルのオープン

前節のように自動でオープンされているファイルハンドルに プログラムの外からファイルを割り当てるやりかたの他に, プログラム内でユーザが入出力用にファイルをオープンすることができる.

open INFILE, "< file1";
open OUTFILE, "> file2";
open APPEND, ">> file3";

は,上から file1 を入力用に開く, file2 を出力用に開く, file3 を追加出力用に開くという意味である.それぞれシェルに対して入力す る文字と同じ記号が使われている.> は一旦出力用ファイルを空にして 新しい内容だけを書き込むのに対し,>> は古い内容を残したまま,後 に新しい内容を追加する.< も > も付かない場合は < を指定した のと同じ意味になる.

% ./match.pl < indata >> outdata

を実行してシェルに対して同様の出力を指定することができる.

close INFILE;

で,INFILE というファイルハンドルでオープンしていたファイルをクローズ できる.使い終ったファイルはすみやかにクローズすべきである.

11.3 die

ファイルのオープンは失敗する可能性がある.

open INFILE, "< file1"
  or die "Cannot open file1: $!";

をファイルオープンの構文と思い,毎回この構文を使ってオープンを行う.

p.122 のパターンチェックプログラムを indata という名前のファイルから入 力するように変更するには,while ループの前に

open INFILE, "< indata"
  or die "Cannot open indata: $!";

を挿入し,while ループのテスト式を

while (<INFILE>){

に変更すればよい.変更して確認せよ.

同じプログラムを outdata という名前のファイルへ出力する ように変更するには,while ループの前に

open OUTFILE, "> outdata"
  or die "Cannot create outdata: $!";

を挿入して出力用にファイルハンドル OUTFILE を開き, print 文と引数リストの間にファイルハンドルを書けばよい. すなわち,もとのプログラムで print と書いてあるところを print OUTFILE に書きなおす.実際に変更して確認せよ.

第 4 回課題「ファイル入出力」

第 4 回課題「ファイル入出力」 を読んで第 4 回課題を提出しなさい.


Updated in November 27, 2007, schedule, Yamamoto Hiroshi