http://qs321.pair.com?node_id=963204


in reply to Reading from a glob into Getopt::Long

On unixish shells, it is the shell, not your program that expands globs. The customary approach to handle this situation is to process @ARGV (instead of @files) after GetOpt has taken all switches away:

GetOptions( ... ); my @files = @ARGV; ... rest of program ...

The alternative approach would be to quote the glob on the command line to prevent the shell from expanding it:

> myprog.pl --filespec '*.mp3'

... and afterwards expand it in your program using File::Glob or whatever globbing semantics you want to provide.

Replies are listed 'Best First'.
Re^2: Reading from a glob into Getopt::Long
by biohisham (Priest) on Apr 04, 2012 at 22:44 UTC
    This quotation of the glob in the shell is awesome indeed !

    Well, I think I was just overworking my brain to realize that I simply might as well use a flag in GetOptions, that will be neater and more efficient since I know a priori that I wanna deal with a specific file type format so I will just need to glob it internally on the program itself rather than from the shell, that will also give me the flexibility of adding another option or flag to process a file by passing its name as an argument to that option. I used File::Wildcard then to capture all these files and then process them as elements in an array.

    use strict; use warnings; use Getopt::Long; use File::Wildcard; use Data::Dumper; my $foo = File::Wildcard->new(path=>"./*.tab.txt"); my @arrayFiles; GetOptions( "extract_all"=>\&goIt ); sub goIt{ while (my $file = $foo->next){ push @arrayFiles, $file; } #do something with @arrayFile #through a subroutine } print Dumper(\@arrayFiles);


    David R. Gergen said "We know that second terms have historically been marred by hubris and by scandal." and I am a two y.o. monk today :D, June,12th, 2011...