プロが教えるわが家の防犯対策術!

perl 01.pl 01.txt 02.txtで01.txtと02.txtの二つのファイルを処理したいのですが方法が良く分かりません。以下のソースです。
@in1=<> # 01.txtを読む
@in2=<>; # 02.txtを読む
print @in2;

ここで、何もしなければそのままです。ここではどうやら標準入力からの入力待ちの状態になっています。なのでコントロールキーとZキーを打鍵してやると終わります。この時に、01.txtと02.txtの内容を表示しての終了となります。

理屈が分からない。
・何故、指定もしていないのにも関わらずに標準入力待ちになっているのか
・どうして、全てを表示する事になるのか

多分にこれは私がperlの動きを理解していないのが原因だとは思いますが。私の誤っている理解を御指摘願います。

A 回答 (1件)

perl 01.pl 01.txt 02.txt


だと、
@in1=<> # 01.txtを読む
 ではなく、
@in1=<> # 01.txt と02.txt を読む
 になります。
その後
@in2=<> # 読むファイルが無くなっているので、標準入力から入力する
 となります。

print @in2;
 だと、何も表示されないはずです。
print @in1;
 だと、01.txt と 02.txt の両方が出力されます。

詳しくは
http://perldoc.jp/docs/perl/5.20.1/perlop.pod#I4 …
> ヌルファイルハンドル <> は特別で、〜
等を参照してください。


<> ではなく、
@ARGVからファイル名を取得→ openで開く→読み込み→(close)
としてください。
    • good
    • 0
この回答へのお礼

親切な回答有難う御座いました。要は、その様な事は仕様に無いと言う事ですね。横着していました。きちんとここではopen文を用いて使うと言う事ですね。分かりました。

お礼日時:2015/08/31 08:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!