Perl打印的不规则行为

时间:2013-01-16 18:18:15

标签: perl

我正在尝试打印出两个不同的文件。出于某种原因,print语句适用于一个文件,但不适用于另一个文件。当我运行这个程序时,filter2.out由一行显示为“Beginning”。 filter2.err仍为空。

open(OUTPUT, "> Filter2/filter2.out");
open(ERROR, "> Filter2/filter2.err");
print OUTPUT "Beginning\n";
print ERROR "Beginning\n";

更新:所以我在一个更大的程序开始时运行它,并意识到它只批量更新ERROR文件或文件关闭时。知道为什么会这样吗?

2 个答案:

答案 0 :(得分:9)

考虑添加

use strict;
use warnings;

到你的脚本的顶部。这些语句将有助于捕获Perl默默忽略的错误。此外,请考虑向您的open电话添加错误检查:很可能,它实际上并未打开。我会这样写:

use strict;
use warnings;

open(OUTPUT, "> Filter2/filter2.out")
    or die "Can't open filter2.out: $!";
open(ERROR, "> Filter2/filter2.err")
    or die "Can't open filter2.err: $!";
print OUTPUT "Beginning\n";
print ERROR "Beginning\n";
例如,通过添加添加严格和警告我得到了:

print() on closed filehandle OUTPUT at .\printer.pl line 6.
print() on closed filehandle ERROR at .\printer.pl line 7.

嗯......!

通过添加错误检查,我得到了:

PS C:\dev> perl .\printer.pl
Can't open filter2.out: No such file or directory at .\printer.pl line 4.

啊哈!看,我没有文件夹。添加文件夹后,一切运行正常。你可能会发现类似的东西。

最后,你应该也可以使用现代的词法文件句柄。这有助于捕获其他错误(例如重用的句柄名称。)因此,最终的脚本将如下所示:

use strict;
use warnings;

open(my $output, ">", "Filter2/filter2.out")
    or die "Can't open filter2.out: $!";
open(my $error, ">", "Filter2/filter2.err")
    or die "Can't open filter2.err: $!";
print $output "Beginning\n";
print $error "Beginning\n";

中提琴!现在,您可以确切地看到问题失败的原因,因为它失败了,并确保您稍后编写的其他库或代码不会意外地干扰您的文件句柄。

答案 1 :(得分:1)

您需要检查您的文件是否已正确打开。最好将局部变量用作文件句柄而不是简单的单词:

open( my $err, "> Filter2/filter2.err") or die "Couldn't open error: $!"
print $err "Beginning\n"