当我在Perl模块(<stdin>
)文件中使用*.pm
时,它没有从键盘读取输入,但是当我在同一个地方使用<STDIN>
时,它工作正常
当我使用<stdin>
时,为什么没有输入?
答案 0 :(得分:21)
STDIN
是文档化的文件句柄。还存在stdin
,其别名为STDIN
,但它仅适用于main::
包:main::stdin
与main::STDIN
相同(如文档所述)在perlop - Perl operators and precedence)。
因此,在包中,
package My::Package;
sub xx {
print while <stdin>;
}
stdin
被解释为My::Package::stdin
,但不存在。您可以使用包中的main::stdin
,但使用标准STDIN
(始终指向main::STDIN
,即使是来自包)也更清晰。
答案 1 :(得分:12)
没有人知道这一点,但发现它在perlop
文件句柄
STDIN
,STDOUT
和STDERR
是预定义的。 (文件句柄stdin
,stdout
和stderr
也将起作用,但在包中,它们将被解释为本地标识符而不是全局。)可以使用open创建其他文件句柄( )功能,等等。见perlopentut和&#34;打开&#34;在perlfunc中了解详情。