perl:打印子程序输出到文件

时间:2018-03-02 10:18:48

标签: perl file-handling

如何将子程序的输出写入文件?

my $logfile="C:/Test/report_p3.txt";
open(my $tt, ">",$logfile) or die "Can not open file";

foreach (@files)
{
if (($_ ne ".") && ($_ ne ".."))
{
    &getinfo($logdir."/".$_);
    print $tt &getinfo; #Here, I wanna pass the output to the handler
}
}

close $tt;

在标准输出上,& getinfo正确打印输出。

2 个答案:

答案 0 :(得分:3)

打开一个输出到变量的文件句柄,然后选择它 之后,进入STDOUT的所有输出都将被捕获到变量中 这是一个例子:

sub output {
    print "test\n";
}

my $out;
open VAROUT, '>', \$out;
select VAROUT;
output();
select STDOUT;
printf "output: %s\n", $out;

答案 1 :(得分:1)

是否真的有必要,你希望传递其输出的子程序实际打印的是什么?

通常你应该简单地让你的返回一个字符串并让调用者决定输出它的位置。

my $logfile="C:/Test/report_p3.txt";
open(my $tt, ">",$logfile) or die "Can not open file";

sub get_log {
  return "some text to log";
}

sub log_write {
  my $log_fh = shift;

  print $log_fh get_log() . "\n";
}

log_write($tt);       # prints to file handle from $tt
log_write(STDOUT);    # prints to STDOUT