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
In reply to Re^3: Getopt Long and processing arrays from Linux shell
by citromatik
in thread Getopt Long and processing arrays from Linux shell
by Scrat
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |