Yas*_*sir 3 printing perl stdout file function
我已经定义了许多功能,这些功能做了很多工作并且有一堆打印语句.可以这样调用它们来构建一个html页面.
print_A()
print_B()
print_C()
Run Code Online (Sandbox Code Playgroud)
现在,我想调用这些函数并将这些print语句的内容存储到一个主变量中.一种方法是重写这些函数,以便它们返回一个包含其内容的字符串(而不是打印)
my $var = "";
$var = $var . store_A();
$var = $var . store_B();
$var = $var . store_C();
Run Code Online (Sandbox Code Playgroud)
但我想在不修改或重写函数的情况下这样做.我不想通过这么小的改变来重新定义这些函数(程序中有数百个这样的函数).
在perl中有更短更快的方法吗?
too*_*lic 11
一种方法是使用select将STDOUT重定向到标量变量:
use warnings;
use strict;
my $out;
open my $fh, '>', \$out;
my $old_stdout = select $fh;
s1();
s2();
select $old_stdout;
close $fh;
print "start\n";
print $out;
print "end\n";
sub s1 {print "s1\n"}
sub s2 {print "s2\n"}
Run Code Online (Sandbox Code Playgroud)
打印出来:
start
s1
s2
end
Run Code Online (Sandbox Code Playgroud)