Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^5: Pointers and References

by LanX (Saint)
on Nov 24, 2020 at 12:17 UTC ( [id://11124129]=note: print w/replies, xml ) Need Help??


in reply to Re^4: Pointers and References
in thread Pointers and References

> ... as opposed to array-style ... but never ever an array ...

Probably nitpicking: You say "array" but mean "list". :)

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

Replies are listed 'Best First'.
Re^6: Pointers and References
by bliako (Monsignor) on Nov 24, 2020 at 19:33 UTC

    Thanks for pointing this out LanX

    Perhaps that's the reason I return a (array)ref: I don't want to say list! Because when I think I grasped the distinction list vs array, something proves me wrong again. But hey when in Perl speak Perl (even if some/quite-a-few publications use the terms interchangebly). I would prefer anonymous, readonly (fixed-size) array of readonly (lest they be references) items.

    But here is a quick question: you can't modify a list item in say a foreach loop foreach my $x (1,2,3){ $x = 42 } (Modification of a read-only value attempted) but in the parameter list to a sub you can: $_[0] = 12 (as jcb demonstrated earlier).

    bw, bliako

      Lists in Perl are two things:

      • a syntax, mostly comma separated (, is a list operator)
      • a temporary stack to pass this sequence of scalars

      Array is

      • a @variable holding
      • a data structure in memory

      So @a = (1,2,3) means step by step

      • array variable @a at LHS forces a list assignment
      • the comma syntax denotes a list
      • the list values are pushed to a stack
      • the stack is assigned to the array and stored in memory in an AV

      I hope it's clearer now.

      If it's a consolation, Larry occasionally confused the terminology too, e.g. in wantarray :)

      > (Modification of a read-only value attempted)

      That's because 1,2,3 are literals which are read only. Use variables (sic) and you can change them in the loop. ;)

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

        yep

        use strict; use warnings; my $x = 12; foreach my $aa ($x,$x){ $aa = 13; } print $x; ---------- 13

        How about "readonly, anonymous stack" instead of list? Iam joking, enough of the nomenclature

        That's because 1,2,3 are literals which are read only. Use variables (sic) and you can change them in the loop. ;)

        It took me a few times to understand this line based on the examples given further below but now this makes sense!

      ... you can't modify a list item in say a foreach loop ... but in the parameter list to a sub you can: $_[0] = 12 ...

      Further to LanX's reply:   And, of course, one cannot modify a literal value in an argument list even though the list is passed as an array (of aliases). In no case can one modify a literal value: 1 is, let us fervently hope, always 1.

      Win8 Strawberry 5.8.9.5 (32) Tue 11/24/2020 14:56:16 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings -l sub f { return $_[0] = 42; } my $x = 88; print f($x); print $x; print f(99); ^Z 42 42 Modification of a read-only value attempted at - line 1.


      Give a man a fish:  <%-{-{-{-<

        Thank you for providing your examples demonstrating how variables, but not literals, can be modified in a list via a for loop or subroutine.

        f(99) ok that's reasonable.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (5)
As of 2024-04-18 15:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found