in reply to A list assignment gotcha
in thread Not understanding 2 sentences in perldoc
That's because the (scalar) operator of an op= imposes scalar context on the lists and so only the last element of each list is affected:
Raku can do these kinds of list operations; see Raku Programming/Meta Operators.c:\@Work\Perl\monks>perl -wMstrict -le "my ($x, $y, $z) = (30, 40, 50); ($x, $y, $z) += (3, 4, 5); print qq{$x, $y, $z}; " Useless use of a constant in void context at -e line 1. Useless use of a constant in void context at -e line 1. Useless use of private variable in void context at -e line 1. Useless use of private variable in void context at -e line 1. 30, 40, 55
Update: I'm not aware that you can do this with pure lists in Perl 5, but it can certainly be done with arrays:
And via List::MoreUtils::pairwise():c:\@Work\Perl\monks>perl -wMstrict -le "my @ra = (30, 40, 50); my @rb = ( 3, 4, 5); ;; $ra[$_] += $rb[$_] for 0 .. $#ra; print qq{@ra}; " 33 44 55
orc:\@Work\Perl\monks>perl -wMstrict -le "use List::MoreUtils qw(pairwise); use vars qw($a $b); ;; my @ra = (30, 40, 50); my @rb = ( 3, 4, 5); ;; my @rc = pairwise { $a + $b } @ra, @rb; print qq{@rc}; " 33 44 55
(The use vars qw($a $b); statement quiets some warnings.)c:\@Work\Perl\monks>perl -wMstrict -le "use List::MoreUtils qw(pairwise); use vars qw($a $b); ;; my @ra = (30, 40, 50); my @rb = ( 3, 4, 5); ;; pairwise { $a += $b } @ra, @rb; print qq{@ra}; " 33 44 55
Give a man a fish: <%-{-{-{-<
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: A list assignment gotcha (updated)
by jcb (Parson) on Jul 31, 2020 at 01:26 UTC | |
by etj (Priest) on Apr 21, 2022 at 07:26 UTC |