in reply to Re: question about getopt
in thread question about getopt

is the general standard way of doing "option" in script,
use strict; use warnings; use Getopt::Std; my %options; if (scalar @ARGV < 3) {usage()}; sub usage { print STDERR << "EOF"; \nThis program does... usage: $0 [-hcfo] -h : this (help) message -c : config file -o : Fj xcf release file -x : output file EOF exit; } getopts ("hc:f:o:", \%options); usage() if $options{h}; if ($options{o}) { $source_file = $options{o}; } else { $source_file = "as.xcf-dist"; } if ($options{c}) { $config_file = $options{c}; } else { $config_file = 'config.ini'; } if ($options{x}) { $dest_file = $options{x}; } else { usage(); }
if you have any suggestion, Please let me know, Cheers

Replies are listed 'Best First'.
Re^3: question about getopt
by moritz (Cardinal) on Jun 24, 2009 at 07:41 UTC
    You can always write that more tidily:
    my $source_file = $options{o} || 'as.xcf-dist'; my $config_file = $options{c} || 'config.ini'; my $dest_file = $options{x} || usage();

    Another possibility is to use Getopt::Long, which IMHO has a nicer API.

      Not just IYHO...
      Tk::Getopt uses the Getopt::Long API and makes it easy to knock up a simple GUI with loading/saving of options and setting defaults too... You can also override the gui part if you want to take options directly from the commandline

      Just a something something...
Re^3: question about getopt
by toolic (Bishop) on Jun 24, 2009 at 16:27 UTC
    I have several suggestions.

    You should probably change 'f' to 'x' in your usage and in your call to getopts. It looks like you have a bug.

    You should probably get rid of the @ARGV check because I doubt it does what you think it does. If you pass these 2 options on your command line, '-c foo -x bar', scalar @ARGV will resolve to 4, not 2, as you might expect. Instead, consider checking the return status of the getopts.

    I make it a habit to check if an option is defined, just in case '0' is a legal value:

    if (defined $options{o})

    Consider using the Core module Pod::Usage instead of rolling your own usage handler. I second the recommendation to switch to Getopt::Long.