An Alternate Syntax for Globbing
Although we use the term globbing freely, and we talk about the
glob operator, you might not see the
word glob in very many of the
programs that use globbing. Why not? Well, most legacy code was written
before the glob operator was given a
name. Instead, it was called up by the angle-bracket syntax, similar to reading from a filehandle:
my @all_files = <*>; ## exactly the same as my @all_files = glob "*";
The value between the angle brackets is interpolated similarly to a double-quoted string, which means that Perl variables are expanded to their current Perl values before being globbed:
my $dir = "/etc"; my @dir_files = <$dir/* $dir/.*>;
Here, we’ve fetched all the nondot and dot files from the
designated directory because $dir has
been expanded to its current value.
So, if using angle brackets means both filehandle reading and globbing, how does Perl decide which of the two operators to use? Well, a filehandle has to be a Perl identifier. So, if the item between the angle brackets is strictly a Perl identifier, it’s a filehandle read; otherwise, it’s a globbing operation. For example:
my @files = <FRED/*>; ## a glob my @lines = <FRED>; ## a filehandle read my $name = "FRED"; my @files = <$name/*>; ## a glob
The one exception is if the contents are a simple scalar variable (not an element of a hash or array); then it’s an indirect filehandle read,[‡] where the variable contents give the name of the filehandle you want to read:
my $name = "FRED"; my @lines ...