- 论坛徽章:
- 0
|
If what's within the angle brackets is neither a filehandle nor a simple scalar variable containing a filehandle name,
typeglob, or typeglob reference, it is interpreted as a filename pattern to be globbed, and either a list of filenames or
the next filename in the list is returned, depending on context. This distinction is determined on syntactic grounds
alone. That means "<$x>" is always a readline() from an indirect handle, but "<$hash{key}>" is always a glob(). That's
because $x is a simple scalar variable, but $hash{key} is not--it's a hash element. Even "<$x >" (note the extra space)
is treated as "glob("$x ")", not "readline($x)".
One level of double-quote interpretation is done first, but you can't say "<$foo>" because that's an indirect filehandle
as explained in the previous paragraph. (In older versions of Perl, programmers would insert curly brackets to force
interpretation as a filename glob: "<${foo}>". These days, it's considered cleaner to call the internal function
directly as "glob($foo)", which is probably the right way to have done it in the first place.) For example:
while (<*.c>) {
chmod 0644, $_;
}
is roughly equivalent to:
open(FOO, "echo *.c | tr -s ' \t\r\f' '\\012\\012\\012\\012'|");
while (<FOO>) {
chomp;
chmod 0644, $_;
}
相当于glob的作用。 |
|