如何在Perl中打印变量?

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)