File Handle - ファイルへの出力

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 行目の入力が強制終了です。モニタには ^d と表示されることもありますが、なにも表示されない場合もあります。

改行命令が入っていないので、シェルプロンプトが中と半端な所に入っていますが、ご愛嬌です(^^;

次に、 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 を紹介しました。ここでは、以上を踏まえて、ファイル・ハンドルについてまとめておきます。

Copyright SUGAI, Manabu. Since: 1st/Jun./2001
FC2> モビット