使用 no strict
时,以下代码按预期工作:
my $file = STDIN;
while (<$file>) {
print "$_\n";
}
使用
use strict;
的同等解决方案如何?到目前为止,我已经尝试过:
${STDIN}
、 $STDIN
、 \$STDIN
、 <STDIN>
和 \STDIN
,我知道最后两个运算符( <>
和 \
)的含义与我想在这里使用的含义不同。STDIN
到底是什么变量?它被认为是标量吗? 最佳答案
my $stdin_h = \*STDIN;
提供最少的惊喜。那是一个全局引用。另见 perldoc perlref 和 Typeglobs and Filehandles in perldata :
STDIN
是一个裸词。当函数的参数需要文件句柄时,它等效于上述 \*STDIN
之一,但其余时间等效于 "STDIN"
(为此 use strict 'refs';
抛出错误)。我链接到的 Perl 文档解释了所涉及的各种数据类型之间的差异,但 DavidW 的简短摘要很有用:
关于perl - 在严格模式下将 STDIN 分配给变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29167198/