2017-10-10 84 views
0

我有一个子程序:的Perl:存储打印功能的输出不改变功能

sub application(**arguments**) 
{ 
     print ("found the black ship"); 
     # many more print statements. 
     return 18000; 
} 

我需要通过在文件上面的子程序打印的数据。

PS:我不能改变函数变量,只有我能做的事情是访问函数。

+0

Perl不支持的论点就像你在这里暗示,除非你有一个非常新的Perl和方式的函数定义[了'signatures'功能开启(https://perldoc.perl.org/ perlsub.html#签名)。 – simbabque

回答

1

确定你真正想要的是调用函数之前STDOUT重定向到一个文件,然后重定向回算账:

# open filehandle log.txt 
open (my $LOG, '>>', 'log.txt'); 

# select new filehandle 
select $LOG; 

application(); 

# restore STDOUT 
select STDOUT; 
+0

任何其他方式交换标准输出与文件句柄?正如我目前的情况,选择将被视为一个无法识别的函数,因为Iam正在处理一个混合形式的perl文件。 – vikram9866

1

您可以重新打开STDOUT(你需要关闭它第一次虽然) 。

close STDOUT; 
open STDOUT, '>>', 'somefile.txt' or die $!; 
application(...); 

这些都在open()的文档中。

2

在打印到“默认文件句柄”时,而不是明确指向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";