Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

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: https://gist.github.com/creaktive/4607326

Comment on operation inside reference
Select or Download Code
Re: operation inside reference
by AnomalousMonk (Abbot) 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 (Canon) 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 +l5db.pl:644] 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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (7)
As of 2014-12-25 07:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (159 votes), past polls