我有一个非常大的程序,需要向 写入很多内容STDOUT
,我希望能够将所有输出都传递给 和STDOUT
,并将它们发送到任意的FILE
。我决定使用IO::Tee
来创建共享的可写句柄:
use IO::Tee;
pipe(my $reader, my $writer);
my $new_stdout = IO::Tee->new(\*STDOUT, $writer);
*{STDOUT} = $new_stdout;
print "foo";
print(do { local $\; <$reader> });
然而,这会导致深度递归并使程序崩溃。因此,我无法引用*STDOUT
,而是创建了它:
use IO::Tee;
pipe(my $reader, my $writer);
my $new_stdout = IO::Tee->new(*STDOUT, $writer);
*{STDOUT} = $new_stdout;
print "foo";
print(do { local $\; <$reader> });
这会产生警告:Undefined value assigned to typeglob at ... line 42
,而当我使用Data::Printer
来描述时$new_stdout
,结果是undef
。我该怎么做?