Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

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:


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 -x "hello" // $x becomes "hello"
perl -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


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

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.

      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.


        $ perl /tmp/ unset $ perl /tmp/ -x true $ perl /tmp/ -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?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://849595]
Approved by ahmad
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (10)
As of 2017-05-25 19:36 GMT
Find Nodes?
    Voting Booth?