Assigning to a variable returns as its result the value that was assigned. $foo = 3 returns 3, $bar = 'xyzzy' returns 'xyzzy', and so forth. $string = shift assigns $string the value of the first argument passed and returns that value, which is then evaluated by the or as either true or false. If the value is false (empty, undef, or 0), it then evaluates whatever comes after the or, in this case return "". If the value is true (any other value), then we already know that the expression is true (an or is true if either side is true), so it just continues on without evaluating the expression after the or. Evaluating only as much of a logical expression as is necessary to determine whether it's true or false is known as "short-circuit evaluation".

So:

Note, however, that there is a subtle bug in the first argument's handling: An empty string is returned if the first argument is false, not just if it's empty. This means that the string '0' (or '00' or '000' or...) will be incorrectly truncated to ''.

Edit: Thanks to gwadej for correcting my incorrect impression that strings containing (only) multiple zeroes would evaluate as false.


In reply to Re: Shift or return by dsheroh
in thread Shift or return by sandy1028

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.