2017-02-27 21 views
4

the perldoc for print工作,它說,這應該工作:的Perl:FD的內聯選擇在文檔不符合嚴格的裁判

print { $OK ? STDOUT : STDERR } "stuff\n"; 

但它與use strict不確實,當我再使用引號像

print { $OK ? "STDOUT" : "STDERR" } "stuff\n"; 

我得到

Can't use string ("STDOUT") as a symbol ref while "strict refs" in use ... 

我怎樣才能得到這個結構不d工作與use strict聯繫?

感謝,

Mazze

+0

嘗試把明星STDOUT'的'前,即使用[類型團(HTTP://perldoc.perl .org/perldata.html#Typeglobs-and-Filehandles):'print {$ OK? * STDOUT:* STDERR}「stuff \ n」;' –

+0

謝謝,這解決了它:)我現在應該如何「關閉」這個問題? – Mazze

+0

另請參閱[爲什麼我必須在Perl裸語句文件句柄前使用* *(http://stackoverflow.com/q/2242812/2173773) –

回答

7

試試這個:

print { $OK ? *STDOUT : *STDERR } "stuff\n"; 

,星號表示類型團。由於沒有標記來表示文件句柄,因此您必須使用typeglob sigil(星號)。

5

要防止錯誤信息Bareword "STDOUT" not allowed while "strict subs" in use at ...你必須使用一個類型團:

#!/usr/bin/perl 

use strict ; 
use warnings ; 

my $OK = 1 ; 

printf { $OK ? *STDOUT : *STDERR } "stuff\n" ; 
相關問題