Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

beautifying Getopt::Long in situ subs

by perlcapt (Pilgrim)
on Apr 02, 2006 at 13:46 UTC ( #540748=perlquestion: print w/ replies, xml ) Need Help??
perlcapt has asked for the wisdom of the Perl Monks concerning the following question:

I'm looking for suggestions on how to beautify/clean_up my subroutine argument references. Here is the situation: I have many options to my application, all of which are stored in an object attributes structure. Typical Getopt::Long elements looks like this:
my $opts = GetOptions ( "input|source|i:s" => sub { if($_[1]) { $new->source($_[1]); }else{ $new->source($last->source); } }, "verbose" => sub { $new->verbose($_[1]); }, # and so on
What I find ugly is the use of $_[1] to reference the value that GetOptions parses for each option. $_[0] is the option name. $_[1,2] are used for values or references to hashes and lists. I suppose I could just pass the whole list to the object method, but that gets ugly since most of these methods are designed to store/retrieve attributes and defined by an AUTOLOAD subroutine down in the class i.e. package.
Updated to reflect proper variable prefix for list refs. thanks to davido for waking me up about my syntax. -ben
perlcapt
-ben

Comment on beautifying Getopt::Long in situ subs
Download Code
Re: beautifying Getopt::Long in situ subs
by davido (Archbishop) on Apr 02, 2006 at 17:05 UTC

    First, turn on warnings and behold what happens. What you're doing works, but is not proper. Change all occurrences of @_[1] to $_[1] (and so on).

    Also, with constants you could name the subscripts instead. Example:

    use constant OPTION_NAME => 0; sub { if( $_[OPTION_NAME] ) { .......

    Dave

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (3)
As of 2014-09-18 04:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (108 votes), past polls