What is the difference between <stdin> and <STDIN>?

佐手、 提交于 2019-12-14 03:43:21

问题


When I use <stdin> in Perl module (*.pm) files it's not reading input from the keyboard, but when I use <STDIN> in the same place it works fine.

Why is it not getting input when I use <stdin>?


回答1:


STDIN is the documented filehandle. There exists stdin as well, which is aliased to STDIN, but it only works in the main:: package: main::stdin is the same as main::STDIN (as documented in perlop - Perl operators and precedence).

In a package, therefore,

package My::Package;
sub xx {
    print while <stdin>;
}

stdin is interpreted as My::Package::stdin, which doesn't exist. You can use main::stdin from a package, but using the standard STDIN (which always points to main::STDIN, even from a package) is much cleaner.




回答2:


Didn't know about this, but found it documented in a throw-away paragraph in perlop

The filehandles STDIN, STDOUT, and STDERR are predefined. (The filehandles stdin, stdout, and stderr will also work except in packages, where they would be interpreted as local identifiers rather than global.) Additional filehandles may be created with the open() function, amongst others. See perlopentut and "open" in perlfunc for details on this.



来源:https://stackoverflow.com/questions/31185416/what-is-the-difference-between-stdin-and-stdin

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!