Case 5, since the options are required ('='), why does GetOptions() return true? I expected it to fail.

You used : where you meant to use =, but that doesn't change the result.

The *option's argument* is required, not the option itself.

If you want to make the option required, you can check if the option variable is defined after the call to GetOptions.

Case 6, since the options are not required (':'), and the documentation says "In this case, if no suitable value is supplied, string valued options get an empty string '' assigned, while numeric options are set to 0.", I expected '' and 0 to be asigned to the variables.

It's a bit clearer in the documentation of for ":": "If [the option's argument] is omitted, an empty string will be assigned to string values options, and the value zero to numeric options."

The following would be even clearer: "If the option is present but the the option's argument is omitted, an empty string will be assigned to string values options, and the value zero to numeric options."

Since the option was never specified, its argument was never omitted, so the option variable was never assigned the default value.

You can assign to the option variable before calling GetOptions to get the behaviour you desire.

PS — It's safer to always localize changes to global variables. local @ARGV = ...;.


In reply to Re: Trying to understand subtleties of Getopt::Long, please help by ikegami
in thread Trying to understand subtleties of Getopt::Long, please help by Rudif

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.