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

问题描述 投票:-1回答:2

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

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正确打印输出。

perl file-handling
2个回答
3
投票

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

sub output {
    print "test\n";
}

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

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
© www.soinside.com 2019 - 2024. All rights reserved.