我有一个perl脚本,它打开一个文件并在其中写入一些数据。有时,此文件在某些计算机上具有只读权限。对于这种情况,目前脚本因无法打开文件而死亡。我的要求是在这种情况下,我希望我的脚本继续,而不是在文件中写入内容,将其放在STDOUT中。我将使用warn
而不是死,但我想知道我可以将我的文件句柄FILE1
别名为STDOUT
,这样我就不必修改剩余的代码,原因在于我的实际代码print FILE1 <>
出现在很多地方,我不可能在任何地方放置if\else
条件。我希望我将FILE1
别名为STDOUT
,以便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
答案 0 :(得分:15)
您可以使用*FILE1 = STDOUT;
完成此操作。
前面带有*
的变量称为typeglobs。阅读他们here。
您可能还想开始使用lexical file handles
这就是我如何解决你的问题:
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