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.

        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$
        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