電子書籍の厳選無料作品が豊富!

(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();
-------------------------------------------------------------------------------

A 回答 (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するのは無駄です。
    • good
    • 0

「test.txtの内容を表示することができました」というのは, test.txt がどのような内容であり, それに対していかなる「表示」が得られたことをもって「表示することができました」と判断したのですか?



同様に, 「何も表示されません」というのは test.txt の内容がどうであって, それに対しどのような動作をしたことをもって「表示されません」と断じたのですか?

OS や Perl のバージョン, あるいは「どのようにプログラムを動かしたのか」なども書いてもらえませんか?
    • good
    • 0

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