in reply to Getopt::Declare not working

Your declaration is incomplete. Insert a tab after <value>:
my $args = new Getopt::Declare <<'EOPARAM'; -k <value> print kudos EOPARAM if ( $args->{'-k'} ) { print "Using value: ", $args->{'-k'}."\n"; }
From the manual (emphasis mine):
The parameter definition consists of a leading flag or parameter variable, followed by any number of parameter variables or punctuators, optionally separated by spaces. The parameter definition is terminated by the first tab that is encountered after the start of the parameter definition. At least one trailing tab must be present.

There should be a description of the switch, and at least one tab after each parameter declaration. Note that a newline is needed if declaring multiple parameters. The following

#!/usr/bin/perl use Getopt::Declare; my $args = new Getopt::Declare <<'EOPARAM'; -v <value> -k <value> EOPARAM for ( qw(-v -k) ) { print "Using value: ", $args->{$_}."\n" if $args->{$_}; }
when invoked with perl 559479.pl -k bar -v foo only prints Using value: foo.

--shmem

_($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}

Replies are listed 'Best First'.
Re^2: Getopt::Declare not working
by cprice (Initiate) on Jul 06, 2006 at 14:47 UTC
    Excellent, all I was missing was the tab. My problem now is; I have added an exclude stmt to a section, and I want Getopt::Declare to die if the exclude fails, for example
    my $args = new Getopt::Declare <<'EOPARAM'; [strict] -e <env> Collect data for systems in one env (can be used w +ith -t) -t <type> Collect data for one type of system (can be used +with -e) -s <systemname> Collect data for one system [excludes: -e -t] -- EOPARAM
    the -s option cannot be used with either -e or -t, and I want the command line parser to cause the program to die gracefully when this happens. Right now, the parser spits out an error ("you cant use -s with -(e|t)") and then program execution continues.
      Hum? As for this code
      #!/usr/bin/perl use Getopt::Declare; my $args = new Getopt::Declare <<'EOPARAM'; [strict] -e <env> Collect data for systems in one env (can be us +ed with -t) -t <type> Collect data for one type of system (can be us +ed with -e) -s <systemname> Collect data for one system [excludes: -e -t] -- EOPARAM for ( qw(-e -s -t) ) { print "Using value: ", $args->{$_}." for switch $_\n" if $args->{$_}; } __END__ perl 559575.pl -s quux -e foo -t bar

      it just dies after spitting out it's laments:

      Error: parameter '-e' not allowed with parameter '-s' Error: parameter '-t' not allowed with parameter '-s' Error: unrecognizable argument ('foo') Error: unrecognizable argument ('bar') (try '559575.pl -help' for more information)
      and the for loop is not entered. *shrug* Are you masking signals/__DIE__ ?

      --shmem

      _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                    /\_¯/(q    /
      ----------------------------  \__(m.====·.(_("always off the crowd"))."·
      ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}