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

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.

Update: The last version works with both ways of calling the script:

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

Outputs:

myfile.txt yourfile.txt ourfile.txt

And:

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

Outputs:

myfile.txt yourfile.txt ourfile.txt

HTH

citromatik