2016-09-02 5 views
0

他のファイルの数値からHTMLファイルを生成するはずのPerlスクリプトを開発しています。アイデアは、これらの値を持つファイルを読んでから別のHTMLファイルにリストすることです。数値を含むファイルは一定の時間ごとに更新され、その変更はHTMLに表示されます。PerlファイルI/Oの問題

これらの値は正しく読み込まれていますが(テストしましたが)、HTMLには表示されません。さらに、HTMLタグは印刷されません。

#!/usr/bin/perl 
use IO::Handle; 
use CGI qw(:standard); 

print "Status: 200 OK", "\n"; 
print "Content-type: text/plain", "\n\n"; 

for(;;) { 
    open (my $input_file, "<", "/path/to/input/file/input_file.txt") || die "Unable to open the file: $!"; 
    open (my $html_file, ">", "/path/to/html/file/index.html") || die "Unable to open the HTML file: $!"; 
    print $html_file "<html><head><title>title</title><META HTTP-QUIV='refresh' CONTENT='10'></head><body>"; 
    @lines = <$input_file>; 
    foreach my $line (@lines) { 
     print $html_file "<p>$line</p>"; 
    } 
    print $html_file "</body></html>"; 
    sleep 1; 
    close $input_file || die; 
    close $html_file || die; 
} 

スクリプトのみの反復のために最初ので動作します。これは私が書いたコードです。私が意味することは、HTMLタグと数値が出力ファイルに正しく出力されているということです。次に、反復2からNまで、ファイルは文字通り空ののままです。私はここで何が欠けているのか分かりません。最初の反復では動作しますが、次の反復では動作しないのはなぜですか?あなたはsleep前にファイルcloseする必要があり、事前

+0

なぜCGIとIO :: Handleモジュールをロードしますか?それらを使用しないのはなぜですか?彼らはあなたが私たちに示していないプログラムの他の部分で使用されていますか? –

+0

@Dave、私はautoflushを使用して、ループ内のファイルを開いて閉じることを決めました。 – tulians

答えて

3

感謝。現状では、データはcloseによってファイルにフラッシュしてからすぐに次のopenによって上書きされ、そしてまた、あなたは持っているコードとして

close $html_file or die $! 

を記述する必要が

1秒間空のままにされますので、あなたのプログラムは限り$html_file

あるとして死ぬことはありません

close($html_file || die) 

に相当します10

+0

はい、それでした。今、あなたは期待どおりに動作します。どうもありがとうございました! – tulians