in reply to Re: Getopt Long and processing arrays from Linux shell
in thread Getopt Long and processing arrays from Linux shell

Thanks for the reply.

The short reason I'd like to use the -file option is because the txt files are actually backup files for a MySql db. The user wants to specify which files he'd like to restore(a function which the script already does).

So instead of specifying each file for the whole month of June in one command, he could rather say -file 2007-06-*.txt... or similiar.
Seeing that this can't work, do you have any ideas what I can do?

Replies are listed 'Best First'.
Re^3: Getopt Long and processing arrays from Linux shell
by citromatik (Curate) on Jun 21, 2007 at 10:06 UTC

    Two possible solutions:

    The first one involves making the correct expansion in the call:

    perl ./script.pl $(ls *.txt | sed 's/^/-file /')

    This converts the call to:

    perl ./script.pl -file myfile.txt -file yourfile.txt -file ourfile.txt

    But this is ugly, isn't it?

    Another solution is to do the expansion inside of the script:

    #!/usr/bin/perl use strict; use warnings; use Getopt::Long qw (GetOptions); my (@Files); Getopt::Long::Configure("no_ignore_case", "prefix_pattern=(--|-|\/)"); GetOptions ("file=s@" => \@Files); my @globs = map {glob ($_)} @Files; print "glob: $_\n" for @globs;

    Now you can call the script like:

    ./script.pl -file "*.txt"

    And get the expected output. The quotes in the call arount *.txt are needed to prevent the expansion in the shell prior to the actual call to the script.

    HTH

    citromatik

Re^3: Getopt Long and processing arrays from Linux shell
by moritz (Cardinal) on Jun 21, 2007 at 09:57 UTC
    What about ommiting the -file option alltogether and using all non-option arguments in @ARGV as file names?