ファイルの出力
さて、ファイルの入力が分かったら、ファイルの出力は「開く方向」を変えればいいだけです。下のサンプルプログラムを打ち込んで下さい。つまらないですが、練習のために、入力と同じ内容のファイルを出力するプログラムです。
#Perl ファイル入力と出力両方を行うプログラム use strict; use warnings; use utf8; binmode STDOUT, 'encoding(utf8)'; #Windows の場合は utf8 -> cp932 my ($fh, $fh2); open ($fh, '<:encoding(cp932)', 'text01.txt') or die "ERROR: open: text01.txt: $!\n" ; open ($fh2, '>:encoding(cp932)', 'text01_copied.txt')ファイル出力のポイントとなるのは以下の2点です。
or die "ERROR: open: text01_copied.txt: $!\n"
; while(<$fh>){ print $fh2 $_; } close $fh; close $fh2;
「>」を指定してファイルを open
my ($fh, $fh2); (省略) open ($fh2, '>:encoding(cp932)', 'text01_copied.txt') or die "ERROR: open: text01_copied.txt: $!\n" ;このプログラムではファイルの入力と出力を両方行いますので、2つファイルハンドルを定義します。2つ目は書き出し用ですので、開く方向として「>」を指定しています。ファイル名は、入力用のものとは別に指定します。
print の書き出し先を指定する
もう一つのポイントは、書き出しの部分です。「>」を指定して作成したファイルハンドル $fh2 は「出力用ファイルハンドル」となり、先ほどの「<$fh>」のような入力はできません。その代り、出力の時に利用する事ができます。
画面出力を行っていた最初のプログラムでは「while(<$fh>)」の後で
print $_;となっていた部分が、今度のプログラムでは
print $fh2 $_;となっていますね。
これが、上の open で開いたファイル text01_copied.txt に書き出せという指定です。「出力用ファイルハンドル」は、print と組み合わせて書き出し先のファイルを指定するために使います。
さてこれで、ファイル入出力の基本は終了です。上のプログラムを実行して、同じ内容で text01_copied.txt が書き出されたかをテストして下さい。
>次は:文字コードの種類