我很好奇我是否可以根据某些值或内联表达式(不使用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.
你需要评估每次通话print吗?
如果没有,这对你有用吗:
my $redir = $someFlag ? STDOUT : STDERR;
print $redir "hello world!\n";
Run Code Online (Sandbox Code Playgroud)