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>
?
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>
?
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.
Didn't know about this, but found it documented in a throw-away paragraph in perlop
The filehandles
STDIN
,STDOUT
, andSTDERR
are predefined. (The filehandlesstdin
,stdout
, andstderr
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.
<stdin>
(which could be a compatibility problem, so let's forget it). Its only use is TMTOWTDI. –
Pluvious © 2022 - 2024 — McMap. All rights reserved.
stdin
: Gotta love undocumented features. Stick withSTDIN
– Berchtesgaden