我正在开发一个Perl脚本,该脚本应该从其他文件的数值生成HTML文件。我们的想法是读取具有这些值的文件,然后将它们列在单独的HTML文件中。包含数值的文件每隔一段时间更新一次,并且应在HTML上看到这些更改。
即使正确读取了这些值(我已对其进行了测试),它们也不会在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;
}
该脚本仅适用于第一次 for 迭代。我的意思是HTML标签和数值正确地打印在输出文件中。然后,从迭代2到N,文件保持字面上为空。我看不到我在这里失踪的东西。为什么它在第一次迭代中起作用而在下面的迭代中不起作用?
提前致谢
答案 0 :(得分:3)
在<{em> close
之前,您需要sleep
文件。目前,数据由close
刷新到文件,然后立即被下一个open
覆盖,并留空一秒
你还需要写
close $html_file or die $!
因为您拥有的代码相当于
close($html_file || die)
所以只要$html_file
为