• 締切済み

perlプログラム

(1)のプログラムではtest.txtの内容を表示することができました。 (2)ではaaaが表示されつづけると思いますが、何も表示されません。 なにかまちがっていると思いますが、わかりません。 よろしくお願いします。 --------------------------------------------------------------------------------- (1) --------------------------------------------------------------------------------- sub Main() { LAST:while(){ if(defined(open(FILE,"test.txt"))){ flock(FILE,1); while(<FILE>){ print $_; last LAST if($_ == 0); } } sleep(1); } close(FILE); } &Main(); ------------------------------------------------------------------------------- (2) ------------------------------------------------------------------------------- sub Main() { LAST:while(){ if(defined(open(FILE,"test.txt"))){ flock(FILE,1); while(<FILE>){ print "aaa";  ←変更箇所 last LAST if($_ == 0); } } sleep(1); } close(FILE); } &Main(); -------------------------------------------------------------------------------

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> (2)ではaaaが表示されつづけると思いますが、何も表示されません。 なぜ、そう思ったのでしょうか? おそらく、その解釈が間違っています。 このプログラムで"aaa"が表示されつづけるのは、test.txtが一定の条件を満すときだけです。 その条件は「全ての行が、0個以上の空白+数字列で始まっていて、その数値が0でない」ことです。 実際のtest.txtはどうなっているのでしょうか? (1)の方が「表示できた」と言っているので、1行だけのテキストですか?2行目以降があった場合、表示されない可能性が高いので。 > last LAST if($_ == 0); この行の意味、わかってますか? 特に $_ == 0 、わかってますか? 「表示されない」の理由ははっきりしません。test.txtがopenできたら、最低1回は出力されます。 ・test.txtのopenに失敗している ・"aaa"には改行が無いので、 aaaと表示 → プログラム終了 → プロンプト等が行頭から表示されてaaaを上書き(aaaが表示されてないように見える) となっている可能性はあります。 そもそも、「LAST:while(){」で囲ってある意味がわかりません。何を意図したのですか? closeの位置も変です。LAST:while()のループがlastで抜けなかった場合は、FILEをcloseしないままopenを繰り返すことになります。 test.txtの内容が変化しないのなら、何度もopenするのは無駄です。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「test.txtの内容を表示することができました」というのは, test.txt がどのような内容であり, それに対していかなる「表示」が得られたことをもって「表示することができました」と判断したのですか? 同様に, 「何も表示されません」というのは test.txt の内容がどうであって, それに対しどのような動作をしたことをもって「表示されません」と断じたのですか? OS や Perl のバージョン, あるいは「どのようにプログラムを動かしたのか」なども書いてもらえませんか?