- ベストアンサー
foreach構文をwhile構文で実現したい。
下記にありますforeach構文をwhile構文で実現しようと試みているのですが 何故か同じように実現できず、無限ループになっているような気がします。 どこに問題があるのか当方ではわからない為、どなたかご教授いただけませんでしょうか。 ------------------------------ $ cat list1.txt 01<>ああああ 01_01<>あAAA 01_02<>あBBB 01_03<>あCCC 01_04<>あDDD 02<>いいいい 02_01<>いAAA 02_02<>いBBB 02_03<>いCCC 02_04<>いDDD ------------------------------ ■成功版 open(IN, "<list1.txt"); @datas = <IN>; close(IN); open(OUT, ">date.txt"); foreach (@datas) { chomp; ($a, $b) = split(/<>/, $_);#$_は省略できます。 print OUT "'$a'=>'$b',\n"; } close(OUT); ■取組版 open(IN, "<list1.txt"); @datas2 = <IN>; close(IN); open(OUT, ">date2.txt"); while (@datas2) { s/^/'/; s/<>/'=>'/; s/$/',/; print OUT; } close(OUT);
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
while (@datas2) { $_ = shift @datas2; ... では?
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
open(IN, "<list1.txt"); open(OUT, ">date2.txt"); while (<IN>) { s/^/'/; s/<>/'=>'/; s/$/',/; print OUT; } close(OUT); close(IN); #にするとか
お礼
close(IN);を最後にもってきても良いんですね。 参考になります。ありがとうございました。
お礼
shiftでずらせばよかったんですね。 ありがとうございました。