使用 no strict 时,以下代码按预期工作:

my $file = STDIN;
while (<$file>) {
    print "$_\n";
}

使用 use strict; 的同等解决方案如何?

到目前为止,我已经尝试过: ${STDIN}$STDIN\$STDIN<STDIN>\STDIN ,我知道最后两个运算符( <>\ )的含义与我想在这里使用的含义不同。
STDIN 到底是什么变量?它被认为是标量吗?

最佳答案

my $stdin_h = \*STDIN;
提供最少的惊喜。那是一个全局引用。
另见 perldoc perlrefTypeglobs and Filehandles in perldata :
STDIN 是一个裸词。当函数的参数需要文件句柄时,它等效于上述 \*STDIN 之一,但其余时间等效于 "STDIN" (为此 use strict 'refs'; 抛出错误)。
我链接到的 Perl 文档解释了所涉及的各种数据类型之间的差异,但 DavidW 的简短摘要很有用:

关于perl - 在严格模式下将 STDIN 分配给变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29167198/

10-12 17:29
查看更多