Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^2: Having trouble reading in a hash from a referenced array

by bliako (Monsignor)
on Dec 18, 2020 at 22:54 UTC ( [id://11125434]=note: print w/replies, xml ) Need Help??


in reply to Re: Having trouble reading in a hash from a referenced array
in thread Having trouble reading in a hash from a referenced array

Wouldn't using $VAR1->{"movie_results"}->[0] make it clearer that key/entry "movie_results" contains an array reference? $VAR1->{"movie_results"}[0] is confusing (to me). Why is it even allowed to work? It begs me to turn to a manual for clarification about what data types a Perl hash can contain. Sanity check: Perl Data Structures still hold only numbers, scalars and references. OK. Personally, I like to see this extra clarification (the ->) in my (and others) code. It makes reading and understanding (other's) code faster, albeit it seems like a sticking finger!!!.

bw, bliako

Replies are listed 'Best First'.
Re^3: Having trouble reading in a hash from a referenced array
by LanX (Saint) on Dec 18, 2020 at 23:10 UTC
    > Why is it even allowed to work?

    It's the same and documented so, after the first arrow the others are redundant

    $VAR1->{"movie_results"}->[0]

    exactly the same as

    $VAR1->{"movie_results"}[0]

    will update with links to perldocs ...

    UPDATE

    see perlreftut#Arrow-Rule

    "In between two subscripts, the arrow is optional."

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

      Quite right you are.

      But I feel that making the arrow optional between two subscripts is confusing if Perl still makes a distinction between a reference and the data structure it refers to. I guess the rule is simple: PDS (Perl Data Structure=hash,array) can not contain arrays but refs or scalars. So drop the arrow notation. Hmmmm that might be confusing for a new-comer as it may suggest that arrays (not arrayref) is allowed inside a PDS.

      That's a general Perl comment, not about what you wrote.

        I think of an @array as just syntactic sugar for an $a_ref = \@array.

        They are not two different data types, just two sides of the same coin.

        Without @sigil and %sigil many context mechanics wouldn't work.

        Edit

        Concerning repeated arrows ...

        Perl is very special among other scripting languages in requiring explicit dereferencing. (this might be a C thing, I'm not sure)

        How would you explain to someone coming from JS, Python or Ruby that he not only needs one -> but a bunch full for every level?

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

        Maybe the intention is to allow $a[1][2][3] instead of the clumsy $a[1]->[2]->[3].

        Greetings,
        -jo

        $gryYup$d0ylprbpriprrYpkJl2xyl~rzg??P~5lp2hyl0p$

Log In?
Username:
Password:

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

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

    No recent polls found