我有一个子程序:的Perl:存储打印功能的输出不改变功能
sub application(**arguments**)
{
print ("found the black ship");
# many more print statements.
return 18000;
}
我需要通过在文件上面的子程序打印的数据。
PS:我不能改变函数变量,只有我能做的事情是访问函数。
我有一个子程序:的Perl:存储打印功能的输出不改变功能
sub application(**arguments**)
{
print ("found the black ship");
# many more print statements.
return 18000;
}
我需要通过在文件上面的子程序打印的数据。
PS:我不能改变函数变量,只有我能做的事情是访问函数。
确定你真正想要的是调用函数之前STDOUT重定向到一个文件,然后重定向回算账:
# open filehandle log.txt
open (my $LOG, '>>', 'log.txt');
# select new filehandle
select $LOG;
application();
# restore STDOUT
select STDOUT;
任何其他方式交换标准输出与文件句柄?正如我目前的情况,选择将被视为一个无法识别的函数,因为Iam正在处理一个混合形式的perl文件。 – vikram9866
您可以重新打开STDOUT
(你需要关闭它第一次虽然) 。
close STDOUT;
open STDOUT, '>>', 'somefile.txt' or die $!;
application(...);
这些都在open()
的文档中。
在打印到“默认文件句柄”时,而不是明确指向STDOUT
,您可以在调用该方法之前调用select
。没有必要乱用STDOUT
文件句柄。
my $output = '';
open my $capture, '>', \$output;
my $old_fh = select $capture;
application(...);
select $old_fh; # restore default file handle, probably STDOUT
close $capture;
print "The output of application() was: $output\n";
Perl不支持的论点就像你在这里暗示,除非你有一个非常新的Perl和方式的函数定义[了'signatures'功能开启(https://perldoc.perl.org/ perlsub.html#签名)。 – simbabque