pyro.699 has asked for the wisdom of the Perl Monks concerning the following question:

Hello, You know in dos, you can search for a file by typing *.* or *.txt, using * as a wildcard? well, im trying to do the same thing with my perl script. I did atempt this and got this far:
$file = $ARGV[0]; $find = $ARGV[1]; $replace = $ARGV[2]; @split = split(/\./, $file); opendir(DIR, "."); if ($file = /\*\.\*/) { @format = grep(/\./, readdir(DIR)); # *.* } if ($file = ".\.\*") { @format = grep($split[0]./\../, readdir(DIR)); # test.* } if ($file = "\*\..") { @format = grep(/.\./.$split[1], readdir(DIR)); # *.txt } if ($file = ".\..") { @format = grep($split[0]./\./.$split[1], readdir(DIR)); # te +st1.txt } $file_count = 0; for $file (@format) { ... } ...
I cannot get it working quite right, i want the user to have the ability to use one of the following: *.* *.ext file.* file.ext Thanks a ton ~Cody Woolaver

Replies are listed 'Best First'.
Re: Wildcards and Files
by imp (Priest) on Apr 04, 2007 at 00:16 UTC
Re: Wildcards and Files
by ferreira (Chaplain) on Apr 04, 2007 at 09:50 UTC

    Like imp said, first you expand the globs with glob function and then you do what you want with the result you got.

    my @files = glob('*.*'); # or 'test.*' or '*.txt' for my $file (@files) { # ... }
    As you mentioned DOS wildcards, maybe the semantics of glob that comes from Unix does not match exactly what you want. Then you should take a look at File::DosGlob.

    Another sidenote: $file = /\*\.\*/ and $file = ".\.\*" won't work. You're using the '=' operator when you'll want '=~' (match operator) or 'eq' (string comparison). But even so, $file =~ /\*\.\*/ will match more than you want, like 'a*.*b' and so $file eq '*.*' would be preferred.