4

STDOUT在 Perl 脚本中进行了重定向。我在模块中打印的所有内容都被重定向到一个文件。有没有办法STDOUT在 Perl 模块中恢复?

这是我的例子

require my_module;

open(STDOUT, ">$outlog") || die "Error stdout: $!";
open(STDERR, ">>$outlog") || die "Error stderr: $!";

my_module::my_func();

所以我想STDOUTmy_module::my_func()函数中打印一条消息并退出。

4

2 回答 2

2

实际上,除非您将其保存在其他位置,否则您无法恢复 STDOUT。

您可以执行以下操作:

        # Save current STDOUT handle in OLDOUT
        open (OLDOUT, ">&STDOUT") or die "Can't open OLDOUT: $!";   

        # Set STDOUT to a your output file
        open (STDOUT, ">$youroutputfile") or die "Can't open STDOUT: $!";

        # Do whatever you want to do here.......
        # ...........

        # Close STDOUT output stream
        close (STDOUT);

        # Reset STDOUT stream to previous state
        open (STDOUT, ">&OLDOUT") or die "Can't open STDOUT: $!";

        # Close OLDOUT handle
        close (OLDOUT);

        # Here your preview STDOUT is restored....

:)

于 2013-01-09T12:11:08.913 回答
2

似乎我找到了解决方案。首先我保存STDOUT在主脚本中,然后我在模块中使用它。

require my_module;
open(SAVEOUT, ">&STDOUT") || die "Unable to save STDOUT: $!";
open(STDOUT, ">$outlog") || die "Error stdout: $!";

open(STDERR, ">>$outlog") || die "Error stderr: $!";

my_module::my_func();

my_module::my_func()我退出之前添加了以下行

open (STDOUT, ">&main::SAVEOUT") or die "Unable to restore STDOUT : $!";
print "a_module!!!\n";

我的打印信息已发送至STDOUT

于 2013-01-09T09:02:31.730 回答