如何在Perl中动态切换到STDOUT/STDERR?

Kei*_*rup 9 perl

我很好奇我是否可以根据某些值或内联表达式(不使用if语句)在打印到STDOUT或STDERR之间切换.

print ($someFlag ? STDOUT : STDERR) "hello world!"
Run Code Online (Sandbox Code Playgroud)

显然,该语法不起作用.

FMc*_*FMc 14

我想这会做你想要的:

print {$someFlag ? *STDOUT : *STDERR} "hello world!";
Run Code Online (Sandbox Code Playgroud)

打印文档中可以看到类似的示例.使用typeglobs以便它可以运行use strict.

另一种策略是定义您自己的打印功能,它的行为会有所不同,具体取决于值$someFlag.


jhe*_*ngs 6

你需要评估每次通话print吗?

如果没有,这对你有用吗:

my $redir = $someFlag ? STDOUT : STDERR;
print $redir "hello world!\n";
Run Code Online (Sandbox Code Playgroud)