$ echo *.pm
barney.pm dino.pm fred.pm wilma.pm
$
The echo command doesn't have to know
anything about expanding *.pm, because the shell
has already expanded it. This works even for your Perl programs:
$ cat >show-args
foreach $arg (@ARGV) {
print "one arg is $arg\n";
}
^D
$ perl show-args *.pm
one arg is barney.pm
one arg is dino.pm
one arg is fred.pm
one arg is wilma.pm
$
Note that show-args didn't need to know
anything about globbing -- the names were already expanded in
@ARGV.
my @all_files = glob "*";
my @pm_files = glob "*.pm";
Here, @all_files gets all the files in the current
directory, alphabetically sorted, and not including the files
beginning with a period, just like the shell. And
@pm_files gets the same list as we got before by
using *.pm on the command line.
In fact, anything you can say on the command line, you can also put
as the (single) argument to glob, including
multiple patterns separated by spaces:
my @all_files_including_dot = glob ".* *";