12

我有一个 perl 脚本,它打开一个文件并在其中写入一些数据。有时此文件在某些​​机器上具有只读权限。对于这种情况,目前脚本会因为无法打开文件而死掉。我的要求是,在这种情况下,我希望我的脚本继续运行,而不是将内容写入文件,而是将其放入 STDOUT。我将使用warn而不是死,但我想知道我可以将我的文件句柄别名FILE1STDOUT这样我就不必修改剩余的代码,因为在我的实际代码print FILE1 <>中存在于许多地方并且我不可能if\else到处设置条件。我希望我将别名FILE1STDOUT这样的 print 语句将在 STDOUT 中输出或写入文件,具体取决于设置的值FILE1文件句柄。可以使用perl吗?

$file = "testfile.txt";
open( FILE1, ">> $file" ) or die "Can not read file $file: $! \n";
print FILE1 "Line1 \n";
print FILE1 "Line2 \n";
print FILE1 "Line3 \n";
print FILE1 "Line4 \n";
close FILE1
4

1 回答 1

19

您可以使用*FILE1 = STDOUT;.

*前面有a 的变量称为类型团。在这里阅读它们 。

您可能还想开始使用词法文件句柄

这就是我将如何解决您的问题:

use strict;
use warnings;

my $file = "testfile.txt";
my $succ = open( my $fh , '>>', $file );

$fh = *STDOUT unless $succ;

print $fh "Line1 \n";
print $fh "Line2 \n";
print $fh "Line3 \n";
print $fh "Line4 \n";

close $fh if $succ; # don't close STDOUT
于 2013-04-17T13:10:37.420 回答