in reply to Re^2: Passing Parameters to subroutine
in thread Passing Parameters to subroutine

> i would not want or be expecting "test,1" since i specifically did not pass the parameter test or 1 to the subroutine test

That's how it is supposed to work. You must distinguish between input subs - i.e. get-opt-handlers - and processing subs.

from Getopt::Long#User-defined-subroutines-to-handle-options

Please note that it's possible to call --option arg1 arg2 arg3 and these arguments need to be processed via 'test=s@' => \&test

In your case of a scalar option, the meaning of "test 1" is

That's consistent with a use case of "test!" => \&test where --no-test will result in a call with test 0 .

use strict; use warnings; use Getopt::Long; GetOptions( 'demo' => \&demo, 'test!' => \&test ) or die("Error in command line arguments\n"); sub test { die "expected 2 args" if @_ != 2; warn join ",",@_; # demo("hello", "world"); } __DATA__
OUTPUT:
C:/Strawberry/perl/bin\perl.exe -w d:/tmp/pm/getopt_long.pl --no-test test,0 at d:/tmp/pm/getopt_long.pl line 16, <DATA> line 28.

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery