Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
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 (Deacon) 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 chanting in the Monastery: (7)
As of 2014-12-25 12:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (160 votes), past polls