in reply to Getopt::Long::GetOptions checking input array for file extensions

Hello thanos1983,

I see three problems in your code (there may be others):

  1. You are not saving anything to @xls:

  2. Getopt::Long::GetOptions ( 'f=s{1,}' => sub { print "This is the number of \@ARG arguments inside the proces +s " . @ARGV . "\n"; print "This is the number of \@xls arguments inside the proces +s " . @xls . "\n"; push @xls, pop @_; # <-- Add this }, ...
  3. In this condition: if scalar (@xls == 0); the parentheses apply scalar to the result of the == comparison. You need either if (scalar @xls) == 0; or just if scalar @xls == 0; — or drop the scalar altogether: if @xls == 0.

  4. If you want to print out the contents of @xls, change

    print "Input given form \@xls: ".@xls."\n";

    to

    print "Input given form \@xls: ", join(', ', @xls), "\n";
  5. (because concatenation puts @xls into scalar context).

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: Getopt::Long::GetOptions checking input array for file extensions
by thanos1983 (Parson) on Aug 08, 2014 at 11:11 UTC

    Hello Athanasius,

    Thank you for your time and effort to assist me with my problem. I have updated the documentation and also the output of the code. Nice tips about the scalar @xls I was not aware the problem.

    I am trying to process all arguments given with the extension -f test.xls -f test-2.xls -f test-3.xls etc.

    I want to separate the -f option from the rest of the argument, in order to keep only the arguments with '*.xls' extension. But the tricky part is that I also need to take care of the last argument -p sample.csv. I was assuming by using the f=s{1,} in my script it will take only in consideration the -f arguments and ignore the -p arguments. Which it will simplify my target at least. But this is another challenge to over come.

    Again thank you for your time and effort.

    Seeking for Perl wisdom...on the process...not there...yet!