我很好奇,如果我可以根据某些值或内联表达式(不使用if语句)在打印到STDOUT或STDERR之间切换。如何在Perl中动态地将打印切换到STDOUT/STDERR?
print ($someFlag ? STDOUT : STDERR) "hello world!"
显然,该语法不起作用。
我很好奇,如果我可以根据某些值或内联表达式(不使用if语句)在打印到STDOUT或STDERR之间切换。如何在Perl中动态地将打印切换到STDOUT/STDERR?
print ($someFlag ? STDOUT : STDERR) "hello world!"
显然,该语法不起作用。
您是否需要评估每次致电print
?
如果不是,将这项工作对您:
my $redir = $someFlag ? STDOUT : STDERR;
print $redir "hello world!\n";
的机制是“选择”输出描述符(文件频道)。
select STDERR;
print ...goes to STDERR...;
select STDOUT;
print ...goes to STDOUT...;
虽然我怀疑这现在已被弃用。
我换这样的事情在返回相应的文件句柄的方法:
print { $obj->which_handle_do_I_want } "Some message";
你可能想看看如何IO::Interactive。
但是,如果您正在进行日志记录,我建议您使用Log::Log4perl,因为您不仅可以更改输出的位置,还可以将输出发送到多个位置,为消息设置优先级等等。而且,您可以在不更改来源的情况下更改所有这些内容。
我会接受它。我只有一个电话打印,但2行做到这一点很好。只是认为这将是很好的内联... – 2009-11-21 22:19:20