Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re^2: Thx, St. Larry, for the Beauty of Sigils

by shmem (Chancellor)
on Jul 27, 2019 at 13:56 UTC ( [id://11103502]=note: print w/replies, xml ) Need Help??


in reply to Re: Thx, St. Larry, for the Beauty of Sigils
in thread Thx, St. Larry, for the Beauty of Sigils

The other problem is the frustrating learn curve of Perl, because we have a list form and a ref form of an array.

No, we have plain variables and references to variables (and functions). The distinction between plain and reference variables is well done IMHO.

But python is worse - it has list and tuple arrays

qwurx [shmem] ~> python Python 2.7.15+ (default, Nov 27 2018, 23:36:35) [GCC 7.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> foo = (1,2,3,4) >>> bar = [1,2,3,4] >>> type(foo) <type 'tuple'> >>> type(bar) <type 'list'> >>> bar[0] = 5 >>> foo[0] = 5 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>> foo (1, 2, 3, 4) >>> bar [5, 2, 3, 4] >>>

and it isn't obvious which is which by looking at the identifier. A tuple is inmutable, a list can be assigned to.
This was a major WTF moment for me.

perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'

Replies are listed 'Best First'.
Re^3: Thx, St. Larry, for the Beauty of Sigils
by LanX (Saint) on Jul 27, 2019 at 14:28 UTC
    > No, we have plain variables and references to variables (and functions).

    I was using my own wording for the distinction.

    But sorry "plain variable" is blah.

    The fact that other languages do implicit dereferencation in their syntax doesn't make them less plain.

    $a, %a and @a are in fact containers for references, to allow such implicit dereferencation. °

    So how are containers "plain" now?

    But Perl is more explicit* here, which helps understanding what is really happening if you do an assignment a=b in another languages, where they sometimes copy the content or the reference.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

    updates

    °) e.g. $a[0] is by definition (\@a)->[0]

    *) "Explicit is better than implicit" quote from Python blah

      But sorry "plain variable" is blah.

      I was using my own wording for the distinction.

      perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'
        Ok so please explain "plain" in your own wording.

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (3)
As of 2024-03-29 01:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found