Perl:存储打印输出功能而不更改功能

时间:2017-10-10 09:46:25

标签: perl file-io

我有一个子例程:

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

我需要将上述子程序打印的数据放在一个文件中。

PS:我无法更改功能变量,我只能访问该功能。

3 个答案:

答案 0 :(得分: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";

答案 1 :(得分:1)

确定你真正想要的是在调用函数之前将STDOUT重定向到文件,然后将其重定向:

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

# select new filehandle
select $LOG;

application();

# restore STDOUT
select STDOUT;

答案 2 :(得分:1)

您可以重新打开STDOUT(您需要先关闭它)。

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

这一切都在open()的文档中。