- ベストアンサー
while文がうまく動かない
a.txt a b c b.txt x y z として次のプログラムを実行 open(A,"<a.txt"); open(B,"<b.txt"); while($a=<A>){ while($b=<B>){ print "$a>>>$b<br>"; } } close(A); close(B); すると実行結果が以下のようになりました。 a>>>x a>>>y a>>>z 上の結果だけではなくてa.txtがbの時cの時も出力されるつもりで書いたのですがなぜかaの時しか出力されません。どなたか理由が分る方いませんか? ちなみに Linux FedoraCore2 perl5 を使用しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
open(A,"<a.txt"); while($a=<A>){ open(B,"<b.txt"); while($b=<B>){ print "$a>>>$b<br>"; } close(B); } close(A); なのでは?
その他の回答 (2)
- hara_peko
- ベストアンサー率28% (11/38)
open(B,"<b.txt"); を最初のwhileループの内側に移動してください。 open(A,"<a.txt"); while($a=<A>){ open(B,"<b.txt"); while($b=<B>){ print "$a>>>$b<br>"; } } 今回のとは関係有りませんが、変数$a,$bはsortの時に使われる変数なので、通常スクリプトを書く時に使うとuse strictしていてもミスに気づきづらくなります。できればさけた方が無難でしょう。
お礼
できました。ありがとうございました。
- ttyp03
- ベストアンサー率28% (277/960)
原因は B が A の1回目のループでEOFまで達してしまうからです。 A の2回目のループで B から取得しようとしても EOF なので何も取得できず終了しています。 対処としては B のループが終わったあとにファイルポインタを先頭に戻す必要があります。 open(A,"<a.txt"); open(B,"<b.txt"); while($a=<A>){ while($b=<B>){ print "$a>>>$b<br>"; } seek(B,0,0); } close(A); close(B);
お礼
ご回答ありがとうございました。
お礼
できました。ありがとうございました。