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

Raj*_*hmi 16 perl perl-module

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

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

cho*_*oba 21

STDIN是记录的文件句柄.存在stdin,也有别名STDIN,但它只在main::包中起作用:main::stdinperlop中main::STDIN记录的相同 - Perl运算符和优先级.

因此,在一个包中,

package My::Package;
sub xx {
    print while <stdin>;
}
Run Code Online (Sandbox Code Playgroud)

stdin被解释为My::Package::stdin,不存在.您可以main::stdin从包中使用,但使用标准STDIN(总是指向main::STDIN,甚至从包中)更清洁.


mob*_*mob 12

不知道这个,但发现它记录在一个丢失的段落中 perlop

文件句柄STDIN,STDOUT和,STDERR是预定义的.(文件句柄stdin,stdout并且stderr除了在包中之外也可以工作,它们将被解释为本地标识符而不是全局.)可以使用open()函数创建其他文件句柄.有关详细信息,请参阅perlfunc中的perlopentut和"open".

  • 它可能是一个比包更旧的历史事物,并且在引入包时没有人足以解决它的行为. (3认同)
  • 为什么有人会知道这个? (2认同)