2011-11-07 12 views
0

テキストファイルに情報を追加していて、終了を文字列として入力するまでこれを実行します。Perlでの正規表現を使用したループの終了

これは私が使用したものですが、 'exit'はループを終了したくありません。あなたの$入力

print "please input info to write to the file\n"; 
my $input = <STDIN>; 
until($input =~ /exit/) 
{ 
    open MYFILE, ">>information.txt" or die "$!"; 
print MYFILE "$input"; 

print "enter 'exit' to exitor add more info\n"; 
my $input = <STDIN>; 
} 

答えて

1

あなたはここでいくつかの間違いを犯していますが、パラパラが言ったように、この特定のバグを引き起こすのは1つだけです。私の愚かな

print "Please input info to write to the file\n"; 
my $input = <STDIN>; 
#Three argument open is better than a global filehandle 
open (my $handle, '>>', 'information.txt') or die "$!"; 
until($input =~ /^exit$/) { #Better with ^$, else 'fireexit' will end the loop as well. 
    print $handle $input; 
    print "Enter 'exit' to exit or add more info\n"; 
    #Remove the 'my', else it is another variable than the one in the until clause 
    $input = <STDIN>; 
} 
close ($handle) or die "$!"; 
+0

は、なぜあなたはループを新たにするたびに、ファイルを開いていますか?加えて、ファイルを閉じることができませんでした。つまり、エラーチェックを失います。あなたの過度に誇張されたオートバイハンドルはあなたのためにそれをしません!そして '$ input'を意味するときに' '$ input" 'を書くべきではありません。そしてあなたはeofをチェックするのを忘れた。 – tchrist

+0

ありがとう@tchrist!私はループのオープンを移動し、後でクローズしました(最初の行が終了せず、全体をスキップする場合は、チェックの周りにifを追加することもできます)。 "$ input"も変更しましたが、私が書いているファイルでeofをチェックするにはどうしたらいいですか?ディスクがいっぱいですか?印刷するか死ぬ? – Konerak

2

もう一つのものを隠しています。私を2番目のものから取り除く。

+0

、感謝を割り当てる... – Arianule