Perl中STDOUT的别名文件句柄

sar*_*jit 9 perl

我有一个perl脚本,它打开一个文件并在其中写入一些数据.有时,此文件在某些​​计算机上具有只读权限.对于这种情况,目前脚本因无法打开文件而死亡.我的要求是在这种情况下,我希望我的脚本继续,而不是在文件中写入内容,将其放在STDOUT中.我将使用warn而不是死,但我想知道我可以别名我的文件句柄FILE1,STDOUT以便我不需要修改剩余的代码,原因在于我的实际代码print FILE1 <>存在于很多地方,我不可能把if\else条件放在各处.我希望我将别名FILE1,STDOUT以便print语句将在STDOUT中输出或根据FILE1filehandle中设置的值写入文件.是否可以使用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
Run Code Online (Sandbox Code Playgroud)

tau*_*uli 15

你可以这样做*FILE1 = STDOUT;.

*前面的变量称为typeglobs.在这里阅读它们 .

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

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

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
Run Code Online (Sandbox Code Playgroud)

  • `open(FILE1,">> $ file")或*FILE1 = STDOUT;`将是一种非常简单的方法. (2认同)