On Dec 16, 2:56 am, [email protected] (practicalperl) wrote:
> This has been confused me:
>
> [an...@localhost tmp]$ ls
> [an...@localhost tmp]$ perl -le'print glob("foo.3")'
> foo.3
>
> there is nothing in the tmp directory.
> but why glob("foo.3") returns the string?
>
> $ perl -v
>
> This is perl, v5.8.8 built for i686-linux
>
There weren't any matches with files and no wildcards
in the glob pattern so the pattern itself is returned *. If
there had been a wildcard in the pattern, then nothing
would have been returned.
perl -E "say glob('foo.3')" <--- returns foo.3 *
perl -E "say glob('foo?3)" <--- doesn't return anything
* You'd have to use bsd_glob in order to not return
the pattern if no files match, eg:
use File::Glob ':glob';
say bsd_glob('foo.3',GLOB_ERR);
Otherwise, if there had been a file "foo.3" with an
actual '.' in the filename, glob('foo.3') would also
return that filename.
Perl uses File::Glob for globbing since 5.6.1 and only
these metacharacters are recognized:
\ Quote the next metacharacter
[] Character class
{} Multiple pattern
* Match any string of characters
? Match any single character
~ User name home directory
For more detail: perldoc File::Glob
Perhaps, you were thinking '.' was also a glob wildcard
as it would be in a regex pattern...
--
Charles DeRykus
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/