> -----Original Message-----
> From: David Samuelsson (PAC) 
> [mailto:[EMAIL PROTECTED]] 
> Sent: 19 September 2002 09:03
> To: 'Jeff AA'; [EMAIL PROTECTED]
> Subject: RE: Using GetOpt::Long
> 
> 
> I want it so it will execute the subs in the order according 
> to the lines when i start the scrippt, and i will try to  
> keep to default -value cause the scipt will probably be used 
> by others aswell so no double --.
> 
> when i run myscript.pl -reg_backup -html
> 
> it should execute reg_backup sub first then the html sub. I 
> plan to have an exit sub that will run if they havent put the 
> switches togheter right. It will be more commnd lines, so if 
> they enter it wrong it will die with an error. and off course 
> there will be some command line that will run almost all 
> subs, but in the order i have specified. So when they specify 
> lets say -all switch it goes to $all here is an order off all 
> subs and the order it should run them in..
> 

in that case don't bother with GetOpts, as it doesn't maintain the order
of the parameters. Try something like this:

use strict;

# This is the default order when no params set
my @funcs = (qw( func1, func2, func3, func4 ));

# Parameters override the defaults
@funcs = @ARGV if @ARGV;

# map the parameter names to the addresses of the subs
my %despatch = (
  func1 => \&func1,
  func2 => \&func2,
  func3 => \&func3,
  func4 => \&func4,
);

# Do the funcky stuff in user determined order
my @result;
for my $func ( @funcs ) {
  $func = lc($func); # case-insensitive
  # Do we have a function that matches the user requested name?
  if ( $despatch{$func} ) {
    @result = &{$despatch{$func}}( \@result ) 
  } else {
    die "Unrecognised function: '$func'";
  } 
}

then just call 
  myscript.pl func2 func4 func1


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to