Nkuipers <[EMAIL PROTECTED]> wrote: > Hello everyone, > > The following is from page 75 in the Camel: > > "List assignment in scalar context returns the number of elements > produced by the expression on the <i>right</i> side of the > assignment: > > $x = ( ($a, $b) = (7,7,7) ); #set $x to 3, not 2 > > ...." > > It goes on to explain how this is useful but from previous reading > in the same section I don't understand how or why this works. When > I first saw this, I worked out the assignment where $a and $b each > get a 7 and the third 7 is discarded, then $x gets the last value > in the list of $a and $b because of the comma operator for list > literals in a scalar context...
The result of scalar assignment is the lvalue on the left hand side: $x = $y = 2; # $x = 2 ($x = 1) = 2; # $x = 2 print $x = 2; # prints 2 In list context, the result of list assignment is the list of values on left hand side: @x = () = 0..10; # @x = () @x = ($y) = 0..10; # @x = (0) @x = ($y, $z) = 0..10; # @x = (0,1) These are consistent, and it's easy to infer the simple, but incomplete, rule: "assigment returns its left hand side" Which can lead a person to believe that compound assignments can always be broken down into two or more steps: $x = $y = 1; # or: $y = 1; $x = $y The problem is that list assignment in scalar context breaks the pattern. $x = ($y) = 0..10; # $x = 11 There's no way to explain why "$x = ($y)" ought to yield 11 here. (In fact, it shouldn't.) You just have to accept that list assigment in scalar context *doesn't* return its LHS. It returns the number of elements on the RHS. HTH -- Steve perldoc -qa.j | perl -lpe '($_)=m("(.*)")' -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]