Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Getopt::Long good style? (tight scoping)

by grinder (Bishop)
on Jul 28, 2004 at 13:17 UTC ( #378024=note: print w/ replies, xml ) Need Help??


in reply to Getopt::Long good style?

I have no problems with the anonymous sub. I do take issue, though, with the list of scalars for options. I much prefer to use a hash to keep things in one place.

But hang on! If you mispell a scalar, the compiler will bark at you. If you mispell a hash key, the runtime will autovivify it for you. Hmm.

But that's ok too, because what I really prefer doing is hiding it all away in a scope, and declaring subs as The Only Way of retrieving values. Admittedly, you still don't get a compile time error, but it will blow up at runtime if you get things worng. My template looks something like:

{ use Getopt::Long; my %opt; GetOptions ( \%opt, qw/ verbose! file:s debug+ help/ ) || die sub { print <<END_OF_HELP; $0: you blew it! Switches are as follows: --help | -h this help screen ... END_OF_HELP } sub debug { exists $opt{debug} ? $opt{debug} : 0 } sub verbose { exists $opt{verbose} ? 1 : 0 } sub file { if( not exists $opt{f} ) { '' } elsif( not defined $opt{f} ) { '/etc/passwd' } else { $opt{f} } } }

The sub file lets you distinguish between an argument that is absent (return an empty string), present, but with no value (return a fixed name) or present with a value (return the value).

Since the %opt hash isn't available outside the scope, the program can't (accidentally or on purpose) modify the contents. This may be construed as a feature.

- another intruder with the mooring of the heat of the Perl


Comment on Re: Getopt::Long good style? (tight scoping)
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://378024]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (17)
As of 2015-07-06 14:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (75 votes), past polls