Perl:在docs中内联选择FD并不适用于严格的引用

时间:2017-02-27 13:13:21

标签: perl

the perldoc for print中,它说这应该有效:

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 ...

如何在不取消使用use strict的情况下使此结构正常工作?

谢谢,

Mazze

2 个答案:

答案 0 :(得分:8)

试试这个:

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

星号表示typeglob。由于没有用于表示文件句柄的符号,因此您必须使用typeglob sigil(星号)。

答案 1 :(得分:5)

要防止出现错误消息Bareword "STDOUT" not allowed while "strict subs" in use at ...,您必须使用typeglob:

#!/usr/bin/perl

use strict ;
use warnings ;

my $OK = 1 ;

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