Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

perl glob

by Anonymous Monk
on Nov 07, 2013 at 13:42 UTC ( #1061564=perlquestion: print w/ replies, xml ) Need Help??
Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks,

I have just wrote a converter and a simple wrapper that allows to convert all the files with the same extension in one go. The wrapper code as follows:

use warnings; use strict; my $input = shift; my @files; if ($input =~ /^\./) { @files = glob "*$input"; } else { @files = $input; } foreach (@files) { print "$_\n"; system("perl converter.pl $_"); }

It can read commands like:

perl wrapper.pl .ws

Now I want to make the wrapper more powerful such that it can also read something like:

perl wrapper.pl test_*.ws

That means all files with name test_xxx.ws should be converted. How can I realize that?

Thanks a lot for your kind help.

Comment on perl glob
Select or Download Code
Re: perl glob
by talexb (Canon) on Nov 07, 2013 at 13:58 UTC

    Normally this globbing would be handled by the shell, so your two commands would be

    perl wrapper.pl *.ws
    and
    perl wrapper.pl test_*.ws
    Leaving your script to work its way through @ARGV and process files.

    To make it even simpler, you could just replace wrapper.pl with converter.pl, unless the wrapper script is doing something that you haven't shown here.

    Alex / talexb / Toronto

    Thanks PJ. We owe you so much. Groklaw -- RIP -- 2003 to 2013.

      Sorry for my poor english...

      The converter.pl is an other long programm which I have wrote for converting scripts in one programming language to the scripts in an other. But with converter.pl I can only convert one file in one go. E.g.:

      perl converter.pl abc.ws

      It will create a new script names abc.is. So I wrote this simple wrapper, to allow me converting several ws files in one go. E.g.:

      perl wrapper.pl .ws

      For instance, it converts abc.ws, efg.ws and hij.ws in one go, which I can't achieve with:

      perl converter.pl .ws.

      P.S.

      perl converter.pl *.ws

      also didn't work, probably because I also allowed users to define the output filename by themselves, e.g.:

      perl converter.pl abc.ws efg.is

      And here is the relevant codes in converter.pl:

      my $file_name = ""; if (scalar(@ARGV) == 2){ $file_name .= $ARGV[1]; } else { $ARGV[0] =~ s/(.+)\.\S+/$1/; $file_name .= $ARGV[0]; $file_name .= ".is"; }

      I checked here whether the user defined a name for the "is" file, if not the "is" file will take the same name with the "ws" file.

      Many thanks!

Re: perl glob
by hippo (Curate) on Nov 07, 2013 at 13:58 UTC

    It's not clear to me from what you have said why you don't just let the shell handle the expansion.

Re: perl glob
by hdb (Prior) on Nov 07, 2013 at 14:23 UTC

    Under Windows, the "shell" would not expand the wildcard, but then you can simply use:

    my @files = glob $input;

      Thanks dude! That works!

      Even better: Win32::Autoglob handles globbing transparently.

      (Note that it does not handle globbing correctly on OS/2 and DOS, and you better don't set an environment variable named SHELL on Windows or else it will assume running under cygwin.)

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
Re: perl glob
by Eily (Hermit) on Nov 07, 2013 at 14:45 UTC

    Instead of system "perl converter.pl $_" you could use do. If you could rewrite converter.pl to work on $_ you could replace your loop with do "converter.pl" for @files. Or even better if converter.pl can work on all arguments:

    { local @ARGV = @files; do "converter.pl"; }

    And if you don't want to rewrite converter.pl :

    foreach (@files) { local @ARGV = $_; do "converter.pl"; }

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1061564]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2014-09-20 22:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (163 votes), past polls