我很好奇,如果我可以根據某些值或內聯表達式(不使用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