【これだけ覚えりゃなんとか使えるPerlメモ5】入出力

ユーザ入力

スカラコンテキストで受ける

chomp($line = <STDIN>)


リストコンテキストで受ける

chomp(@lines = <STDIN>)

入力を終了するにはCtrl-D(WinではCtrl-z)

ユーザからの応答読み取り

ユーザからの応答読み取り

print STDOUT "Enter a number: "; # 数の入力を促す
chop($number = <STDOUT>) # 数を読み込む(改行文字の除去)
print STDOUT "The number is $number.\n"; # その数を表示する

chopは文字列の末尾の文字を無条件で削除する(そして削除した文字を返す)
chompはレコード終了マーカを削除する(そして削除した文字の個数を返す)

ファイル入出力

ファイルのオープンとクローズは以下の記述で可能。

open(IN, "sample.txt");
 〜ファイル処理〜
close(IN);

sample.txtを読み込み用としてオープンしている。以下のINはファイルハンドル名で任意名。

オープンモード

open関数では、入力・出力・パイプのファイルハンドルを作成できる。すでにオープンされているファイルハンドルをオープンした場合、オープンされているファイルを暗黙のうちにクローズしてアクセスできないようにしてから新しいファイルがオープンされる。

open(HANDLE, "filename");  # 既存ファイルから読み込み
open(HANDLE, "<filename"); # 同上
open(HANDLE, ">filename"); # 新規作成して書き込み
open(HANDLE, ">>filename");# 追加書き込み
open(HANDLE, "| command"); # 出力フィルタ
open(HANDLE, "command |"); # 入力フィルタ

ファイル読み込み処理

以下のファイルを読み込み対象とすると、

sample.txt
1:first
2:second
3:third


スカラへ1行読み込み

#!/usr/bin/perl
open(IN, "sample.txt");
$line = <IN>>;
close(IN);
print $line;

出力結果

1:first


配列へ読み込み

#!/usr/bin/perl
open(IN, "sample.txt");
@array = <IN>;
close(IN);
print @array;

出力結果

1:first
2:second
3:third
#!/usr/bin/perl
open(IN, "sample.txt");
while (<IN>) { print; } # while ($_ = <IN>) { print $_; } と同意
close(IN);

出力結果

1:first
2:second
3:third

オープン時のエラートラップ

open ( IN, "filename") || die "Can't open file \n";