jjap has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks,

I wrote a Perl script which receives 2 arguments specified with GetOpt::Long which I call the following way:

perl heavylifter.pl --file thisfile --db thisdatabase

To save myself some time, I made a script which makes a system call to that script over a list of files. However I am at a loss to find out how to specify the arguments in long form.

To get by, I modified my heavylifter script to receive the file as $ARGV[0] and hardcoded the db in it to avoid the --db argument so the calling script looks like the following:
use strict; use warnings; my @listFiles = ("thisfile", "thatfile", "thisotherfile"); foreach my $i (@listFiles) { print "file passed: $i\n"; system ("perl.exe", "full_path_to_heavylifter.pl", $i) ; }

This is clearly a step backward and I would appreciate any guidance on how to properly call a script from a script with GetOpt::Long arguments.

Best regards and thanks!

Replies are listed 'Best First'.
Re: Calling a script from a script with GetOpt::Long arguments
by hdb (Monsignor) on Mar 03, 2015 at 06:58 UTC

    This seems to work for me:

    system ("perl.exe", "heavylifter.pl", "--file", $i, "--db", "my da +tabase") ;
      So it does for me as well! And it seems now embarrassingly obvious...

      Many thanks!

Re: Calling a script from a script with GetOpt::Long arguments
by karlgoethebier (Abbot) on Mar 03, 2015 at 09:25 UTC

    But why don't you make it like this:

    for my $file (@files) { heavy_lifter($file); } sub heavy_lifter { my $file = shift; # heavy stuff }

    Just two more ˘...

    Best regards, Karl

    «The Crux of the Biscuit is the Apostrophe»

      Thanks, I could have done that for sure, but for some gut reason, my intention was to let the original script intact. I have had a few scripts in the past who grew into a number of variants each tailored to a given context, but also with numerous small improvements not shared among all versions. I thought it was better to keep it modular.
        "I could have done that for sure, but for some gut reason...
        "Make it so." Jean-Luc Picard (13 July 2305–)

        But i wouldn't make it so ;-)

        Best regards, Karl

        «The Crux of the Biscuit is the Apostrophe»

Re: Calling a script from a script with GetOpt::Long arguments
by Laurent_R (Canon) on Mar 03, 2015 at 07:27 UTC
    Hmm, is it really a step backward?

    The :

    perl heavylifter.pl --file thisfile --db thisdatabase
    calling syntax really makes sense in interactive mode (when callinf the program from the shell prompt), but if your program is always going to be called from another script, why not make it simpler? For example calling it with the first positional argument being the DB and then the other arguments a list of files (or possiblky the other way around, but this is a bit less clear in my mind).

    Just my two cents.

    Je suis Charlie.
      Your point well taken.

      This is a case I chose to finally get around to learn GetOpt::Long.

      From the inception, I never expected the script would have to deal with a series of files each running 20 to 90 minutes.

      Merci pour le hint...