I like your suggestion to use the ternary operator. In fact, it makes more sense than the high-precedence logical operator approach you outline above. The logical approach relies on short-circuit effects to work, and may not be obvious to future maintainers. The ternary operator is being used in its normal mode.

Another issue with the logical approach is that when the condition is false, the value of $x becomes whatever scalar the condition evaluates to. This could lead to unexpected behavior where the condition may evaluate to an otherwise legal value for $x.

my $y = 0; # ... Much code; my @list = (); # ... Much code my $x = @list && $y; # if $x is 0, did it come from @list or $y?

If the OP wants to do a conditional assignment and declaration on one line, the following is, IMHO, unambiguously the way to go.

sub sub1 { # ... my $x = <some condition> ? $y : undef; # ... }


TGI says moo


In reply to Re^2: "if" in a my declaration statement causes problem by TGI
in thread "if" in a my declaration statement causes problem by ganeshk

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.