Perl文件I / O问题

时间:2016-09-02 02:09:23

标签: html perl

我正在开发一个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,文件保持字面上为空。我看不到我在这里失踪的东西。为什么它在第一次迭代中起作用而在下面的迭代中不起作用?

提前致谢

1 个答案:

答案 0 :(得分:3)

在<{em> close之前,您需要sleep文件。目前,数据由close刷新到文件,然后立即被下一个open覆盖,并留空一秒

你还需要写

close $html_file or die $!

因为您拥有的代码相当于

close($html_file || die)

所以只要$html_file

,您的程序就永远不会消亡