In order to do what I believe you intend, you'll need to use:
@bar = (1,2,3) unless @bar;
What is interesting is that this prints
x:
$bar ||= (1,2,'x');
print $bar, "\n";
So perhaps the RHS is not being interpreted as a list constructor but as a sequence of expressions whose value is the last expression. That would explain this behavior:
my ($a, $b);
($a, $b) ||= ('a', 'b', 'c'); # $a unchanged, $b <- 'c'
($a, $b) ||= (1, 2, 3); # $a unchanged, $b unchanged
$b = (1, 2, 'x'); # $b <- 'x'
$a ||= (3, 4, 5); # $a <- 5
So it appears that
($a, $b) on the LHS is being interpreted as a sequence (not list constructor) of l-values whose value is the last (l-value) expression. However, in this case:
($a, $b) = (7,8,9); # $a <- 7, $b <- 8
we have list constructors on both the LHS and RHS.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.