Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Nested reference to an array

by Perlian (Initiate)
on Oct 01, 2020 at 04:12 UTC ( [id://11122386]=perlquestion: print w/replies, xml ) Need Help??

Perlian has asked for the wisdom of the Perl Monks concerning the following question:

Dear friends, one of the things i can't wrap my mind around with perl is this: I have parsed a JSON document like the example below

{ "data": { "dividends": { "rows": [{ "exOrEffDate": "10/08/2020", "type": "CASH", "amount": "$0.52", "declarationDate": "09/25/2020", "recordDate": "10/12/2020", "paymentDate": "11/02/2020" }, { ... } ] } } }
So basically a JSON document with an array nestded somewhere. Now if i write:
my $Rows = $Data->{data}->{dividends}->{rows}; my @Rows = @$Rows;
@Rows contains an array of hash-references, but if i try to dereference it in one line: my @Rows = @$Data->{data}->{dividends}->{rows}; the perl interpreter errors out with »Not an ARRAY reference«. Yes, true, $Data is a reference to a hash, but $Data->{data}->{dividends}->{rows} is a reference to an array! Please send me some wisdom! Best regards from West Virginia, Frank/2

Replies are listed 'Best First'.
Re: Nested reference to an array
by haukex (Archbishop) on Oct 01, 2020 at 04:52 UTC

    The dereferencing "operators" have high "precedence"; you need to say @{ $Data->{data}->{dividends}->{rows} } instead, or as of Perl 5.24, $Data->{data}->{dividends}->{rows}->@*. Update: The latter feature was acually available as of 5.20, but needed a use feature 'postderef'; to be enabled. See Using References and Postfix Dereference Syntax in perlref. (Update 2: Added the quotes to the first sentence to be more in line with this.)

Re: Nested reference to an array
by tybalt89 (Monsignor) on Oct 01, 2020 at 04:52 UTC
    my @Rows = @{ $Data->{data}->{dividends}->{rows} };
Re: Nested reference to an array
by AnomalousMonk (Archbishop) on Oct 01, 2020 at 14:24 UTC
Re: Nested reference to an array
by johngg (Canon) on Oct 01, 2020 at 09:01 UTC
Re: Nested reference to an array
by Perlian (Initiate) on Oct 01, 2020 at 16:52 UTC
    Thank you Monks! I totally forgot about the operator precedences! The moment i read this word, i slapped my forehead and thought "you dumb@ss! How could you forget this?" As in 2 + 2 * 2 = 8 … 🤣

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (7)
As of 2024-03-28 11:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found