【问题标题】:perl: print output of subroutine to fileperl:将子程序的输出打印到文件
【发布时间】:2018-03-02 10:18:47
【问题描述】:

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

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 4 开始就没有必要了。

标签: perl file-handling


【解决方案1】:

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

sub output {
    print "test\n";
}

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

【讨论】:

    【解决方案2】:

    你想要传递的输出的子例程是否真的需要打印一些东西?

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

    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
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2014-07-22
      • 2011-09-02
      • 2012-09-30
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多