Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
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
Re: Wisdom on the Getopt::Long module
by toolic (Chancellor) 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: (10)
As of 2014-12-19 16:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (85 votes), past polls