Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Wisdom on the Getopt::Long module

by abhijithtk (Novice)
on Jul 14, 2010 at 18:11 UTC ( #849595=perlquestion: print w/ replies, xml ) Need Help??
abhijithtk has asked for the wisdom of the Perl Monks concerning the following question:

Hello,

My question might be a bit stupid but it would be nice if i could get it to work.

I have a command line option, say -x. In the GetOptions() function i have declared it as GetOptions('x:s'=>\$x);

Incase the -x option is given with a string, $x gets that value.

Incase the -x option is given with no string , $x becomes 0.

Is there anyway for me to acheive both, handle the case where if some value is passed $x contains that string and if no value is passed, $x remains true. ie not 0.

for eg

perl someprogram.pl -x "hello" // $x becomes "hello"
perl someprogram.pl -x // $x becomes 0, but i want it to be set to true, since the option wa +s entered on command line.

It is a stupid question, but i want to be able to use the same variable, to do differnt things.

Is this even possible? :O

Thanks!

20100721 Janitored by Corion: Added formatting, code tags, as per Writeup Formatting Tips

Comment on Wisdom on the Getopt::Long module
Select or Download Code
Replies are listed 'Best First'.
Re: Wisdom on the Getopt::Long module
by toolic (Bishop) on Jul 14, 2010 at 18:17 UTC
    I think this satisfies your requirements:
    GetOptions('x:s'=>\$x); $x = 0 unless $x;

    On a side note, please do not enclose your whole posting inside "pre" tags. You should post only your code inside "code" tags. Refer to Writeup Formatting Tips.

      Well,
      
      Incase -x option was not entered i want the value to be undef or '' or 0.
      
      Incase -x was entered with no string, i want the value to be 1.
      
      Incase -x was entered with the string, i want the value to be set to the string.
      
      The first n last happen, but its the 2nd one i want to happen. I dont think what u posted will work.
      

        Why did you ignore the hint to avoid <pre>-Tags around your post?

        Did you only think about the given code, or did you try it?

        You also could have a look at Getopt::Long, which explains what happens, if an option doesn't have its optional argument...

        Another possibility is something like this:

        #! /usr/bin/perl # vim:ts=4 sw=4 sts=4 et nu fdc=3: use strict; use warnings; use Getopt::Long; my $x = "unset"; GetOptions( 'x:s' => sub { $x = $_[1] ? $_[1] : 'true' }, ) or exit 255; print "$x\n";

        It's up to you to refine the checks and values to fit your needs.

        added:

        $ perl /tmp/getopt.pl unset $ perl /tmp/getopt.pl -x true $ perl /tmp/getopt.pl -x foo foo
Re: Wisdom on the Getopt::Long module
by JavaFan (Canon) on Jul 14, 2010 at 22:16 UTC
    GetOptions("x:s"=>\$x); $x ||= defined $x;

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://849595]
Approved by ahmad
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: (6)
As of 2015-08-01 01:33 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 (285 votes), past polls