Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

operation inside reference

by hegotf (Novice)
on May 18, 2013 at 13:30 UTC ( #1034095=perlquestion: print w/ replies, xml ) Need Help??
hegotf has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks

Can anyone explain what does that do? @{$doc->{links} // []}

I don't understand the // [] part.

here is the link to entire code:

Comment on operation inside reference
Select or Download Code
Replies are listed 'Best First'.
Re: operation inside reference
by AnomalousMonk (Canon) on May 18, 2013 at 13:45 UTC

    $doc->{links} is assumed to be either an array reference or undefined. If it is undefined, the  // defined-or operator (new with Perl version 5.10, see Logical Defined-Or in perlop) will evaluate the  [] anonymous array constructor to create a reference to an empty array. The  @{ } expression will de-reference to a (possibly empty) list either the valid  $doc->{links} reference or the empty reference. (Any expression may be evaluated within a  @{ } dereference.) If the  // operator had not been available, the  || operator would probably have served as well since all genuine references are true and the undefined value is false.

Re: operation inside reference
by LanX (Chancellor) on May 18, 2013 at 14:21 UTC
    just to add some code example to the excellent explanation by AnomalousMonk

    DB<116> use warnings; $a=undef; print "< @{$a} >" Use of uninitialized value in array dereference at (eval 49)[multi_per] line 2. < > DB<117> use warnings; $a=[]; print "< @{$a} >" < > DB<118> use warnings; $a=undef//[]; print "< @{$a} >" < > DB<120> use warnings; $a=[1..3]//[]; print "< @{$a} >" < 1 2 3 >

    As you can see generating a list from an nonexistent or undef value causes a warning!

    Defaulting to an empty array solves this issue.

    Cheers Rolf

    ( addicted to the Perl Programming Language)

Re: operation inside reference
by hegotf (Novice) on May 18, 2013 at 14:49 UTC

    Thanks for your help :)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1034095]
Approved by Athanasius
Front-paged by LanX
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (6)
As of 2015-12-02 05:57 GMT
Find Nodes?
    Voting Booth?

    My keyboard shows this many letters:

    Results (35 votes), past polls