Re^4: Not understanding 2 sentences in perldoc
by Anonymous Monk on Jul 29, 2020 at 20:37 UTC
|
"($x, $y, $z) are after the first assignment ready for the next one." The next one is the assignment to qw( a b c ); ?
And what happens to qw( 1 2 3 ) in (my ($x, $y, $z) = qw( 1 2 3 )) = qw( a b c ); # $x = 'a', $y = 'b', $z = 'c'. ? | [reply] [d/l] [select] |
|
The assignment my ($x, $y, $z) = qw( 1 2 3 ) happens first, i.e. those three variables are assigned the numbers 1 to 3, and this first assignment returns the lvalues, to which the values qw( a b c ) are immediately assigned. Update: In other words, the numbers are assigned to the variables, but then immediately overwritten. Since this is just some example code it doesn't make much sense here, but in theory, you could for example be assigning to tied variables where assigning to the variable has some side effect, then it would make a difference.
| [reply] [d/l] [select] |
|
> it doesn't make much sense here,
I'm often using it for setting defaults before unpacking @_ which could have 0,1 or 2 arguments
( my ($x,$y) = (42,666) ) = @_;
| [reply] [d/l] |
|
|
Re^4: Not understanding 2 sentences in perldoc
by Anonymous Monk on Jul 29, 2020 at 20:52 UTC
|
haukex posted "The assignment my ($x, $y, $z) = qw( 1 2 3 ) happens first, i.e. those three variables are assigned the numbers 1 to 3, and this first assignment returns the lvalues, to which the values qw( a b c ) are immediately assigned."
"and this first assignment returns the lvalues" What lvalues does it return? I see (my ($x, $y, $z) = qw( 1 2 3 )) = qw( a b c ); as # 1 = 'a', 2 = 'b', 3 = 'c'. | [reply] [d/l] [select] |
|
- ( ... ) = is a list assignment with list context inside the parens
we have two nested list assignments here
- my ($x, $y, $z) = qw( 1 2 3 ) is a list assignment
effect $x=1, $y=2, $z=3
returns lvalues $x, $y, $z in list context
- ( $x, $y, $z ) = qw( a b c ); is a list assignment
effect $x="a", $y="b", $z ="c"
doesn't return because in void context (start statement)
Hints
- If you don't believe it please try it out
- for terminology refer to perlglossary
| [reply] [d/l] [select] |
|
Hi, it's me the anonymous monk.
( $x, $y, $z ) = qw( a b c );
Why the above returns void context?
(my ($x, $y, $z) = qw( 1 2 3 )) = qw( a b c );
Does it return void context in this expression too?
| [reply] [d/l] [select] |
|
|
|
|
| [reply] |
|
(my ($x, $y, $z) = qw( 1 2 3 )) = qw( a b c );
Is semantically equivalent to this,
my ($x, $y, $z) = qw( 1 2 3 ); # $x = '1', $y = '2', $z = '3'.
($x, $y, $z) = qw( a b c ); # $x = 'a', $y = 'b', $z = 'c'.
| [reply] [d/l] [select] |