Perl's undefined value becomes the empty string if coerced to a string, and the empty string becomes zero if coerced to a number. Therefore, an undefined value will compare equal to zero in numeric comparison. Perl can emit warnings whenever an undefined value is coerced, as you have found.

The smallest change to fix your code is to change the undef on line 17 to 1, thus changing the default value if is_dev_mode is not given to a true value instead of an undefined value.

Alternately, as another monk suggested, change is_dev_mode to is_live and simply load my $is_live = $param->{is_live}; in the prologue. If the is_live key is not given, that will set $is_live to undef, and undef is false in boolean context, without a warning.


In reply to Re: Surprising result when using undef by jcb
in thread Surprising result when using undef by davebaker

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.