我有一个子例程:
sub application(**arguments**)
{
print ("found the black ship");
# many more print statements.
return 18000;
}
我需要将上述子程序打印的数据放在一个文件中。
PS:我无法更改功能变量,我只能访问该功能。
答案 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()
的文档中。