$VAR1 = [ 'test.xls', 'test-2.xls', 'test-3.xls' ]; #### #!/usr/bin/perl use strict; use warnings; use Getopt::Long(); sub usage { my $message = shift(@_); if (defined $message && length $message) { $message .= "\n" unless $message =~ /\n$/; } my $command = $0; $command =~ s#^.*/##; print STDERR ( $message, "usage: $command -f file(s).xls -p file.csv\n" ); die("\n") } my @xls; my $csv; print "This is the number of \@ARGV arguments before the process ".@ARGV."\n"; Getopt::Long::GetOptions( 'f=s{1,}' => sub { foreach $_ (@_) { print $_ . "\n"; /\.xls$/ or die ("Invalid format for option expected -f '*.xls'\n"); push(@xls,$_); } }, 'p=s' => sub { $_ = pop @_; /\.csv$/ or die ("Invalid format for option expected -p '*.csv'\n"); $csv = $_; } ) or usage("Invalid commmand line options."); usage("The '*.xls' file(s) needs to be specified.") if scalar (@xls == 0); usage("The '*.csv' file needs to be specified.") unless defined $csv; print "Input given form \@xls: ".@xls."\n"; print "Input given form \$csv: ".$csv."\n"; =test 'f=s{1,}' => sub { foreach $_ (@_) { print $_ . "\n"; /\.xls$/ or die ("Invalid format for option expected -p '*.xls'\n"); =cut #### This is the number of @ARGV arguments before the process 4 f Invalid format for option expected -f '*.xls' Invalid commmand line options. usage: long.pl -f file(s).xls -p file.csv #### Getopt::Long::GetOptions( 'f=s{1,}' => sub { foreach $_ (@_) { if ($_ =~ /\.xls$/) { print "This is if \$_: ".$_."\n"; push( @xls , $_ ); } elsif ($_ =~ /^f/) { next; } else { die ("Invalid format for option expected -f '*.xls'\n"); } } # End of foreach }, 'p=s' => sub { $_ = pop @_; /\.csv$/ or die ("Invalid format for option expected -p '*.csv'\n"); $csv = $_; } ) or usage("Invalid commmand line options.");