<stdin>和<stdin>有什么区别?

时间:2015-07-02 13:02:21

标签: perl perl-module

当我在Perl模块(<stdin>)文件中使用*.pm时,它没有从键盘读取输入,但是当我在同一个地方使用<STDIN>时,它工作正常

当我使用<stdin>时,为什么没有输入?

2 个答案:

答案 0 :(得分:21)

STDIN是文档化的文件句柄。还存在stdin,其别名为STDIN,但它仅适用于main::包:main::stdinmain::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

中的丢失段落中有记载
  

文件句柄STDINSTDOUTSTDERR是预定义的。 (文件句柄stdinstdoutstderr也将起作用,但在包中,它们将被解释为本地标识符而不是全局。)可以使用open创建其他文件句柄( )功能,等等。见perlopentut和&#34;打开&#34;在perlfunc中了解详情。