Hi

Using Getopt::Long it was fairly easy to implement two related options, like 
--verbose and --silent:

  my $verbose = '';   # option variable with default value (false)
  GetOptions ('verbose|v' => \$verbose, 'quiet'   => sub { $verbose = 0 });

or:
  sub opt_verbose {
    my ( $name, $val ) = @_;
    if ( $name =~ /^s/i ) {
      $verbose = 0;
    } else {
      $verbose = 1 unless $val;
      $verbose += $val;
    }
  }
  GetOptions( 'verbose|v:i' => \&opt_verbose, 'silent' => \&opt_verbose );

How can I achieve something similar with Moose::Getopt?

  has verbose =>
    (
       is => 'rw',
       traits => [ qw( Getopt ENV ) ],
       default      => 0,
       lazy         => 1,
       cmd_aliases => [ qw/ v / ],
       # ...
    );
  has silent => 
    (
    );

I want to do the whole standard thing:
  default value is 0
  %ENV overrides the default
  @ARGV overrides $ENV
  new_with_options parameters overrides @ARGV
    [I'm not certain this is what one wants, but I can't seem anyway around it]
  $foo->set_verbose(1) as expected

This should work for the std options --verbose, --silent/--quiet, --debug, and 
possible a few more...

Beside this I also intend to implement --version and --dryrun. Dryrun also 
seems to come with some trouble,
as you shouldn't be able to unset it if it is set...
i.e.: 
  default value is 0
  set it in %ENV: DRYRUN=1 and you won't be able to unset it 
  set it on cmd-line @ARGV --dryrun, and you won't be able to unset it 
  set it on instantiation  new_with_options( dryrun => 1 ); and you should be 
able to change it
  $foo->set_dryrun(1) should also be overridable

The reason for this?
Set outside the program: Once set, can't be unset, not even from within the 
program.
Set inside the program, would encourage: do a dryrun and then do the real thing 
(as in: determine what to do,
show it, get a confirmation and do it)


Anyone done this before me or have some good pointers or ideas?

Thanks.

regards

Poul H. Sørensen
senior systems consultant
--
Basefarm AS
Nydalen Allé 37A, NO-0484 Oslo
Postal Address: PB 4488 Nydalen, NO-0403 Oslo
+47 9117 7237    | +47 4000 4100
[email protected] | www.basefarm.com

Technical excellence – caring for your business

Reply via email to