Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^3: Not understanding 2 sentences in perldoc

by LanX (Cardinal)
on Jul 29, 2020 at 20:28 UTC ( #11120012=note: print w/replies, xml ) Need Help??


in reply to Re^2: Not understanding 2 sentences in perldoc
in thread Not understanding 2 sentences in perldoc

> What is the lvalues here?

($x, $y, $z) are after the first assignment ready for the second one.

Lvalue means left value of assignment (the recipient)

See also perlglossary

  • lvalue

    Term used by language lawyers for a storage location you can assign a new value to, such as a variable or an element of an array. The “l” is short for “left”, as in the left side of an assignment, a typical place for lvalues. An lvaluable function or expression is one to which a value may be assigned, as in pos($x) = 10 .

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery

  • Comment on Re^3: Not understanding 2 sentences in perldoc

Replies are listed 'Best First'.
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'. ?

      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.

        > 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) ) = @_;

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery

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'.

      • ( ... ) = 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

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      Wikisyntax for the Monastery

        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?

      What lvalues does it return?

      LanX answered that already here.

      This:
      (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'.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11120012]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2021-01-20 13:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?