Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Mini-Tutorial: Dereferencing Syntax

by ikegami (Pope)
on Jun 20, 2012 at 16:54 UTC ( #977408=perlmeditation: print w/ replies, xml ) Need Help??

Direct Using References
Syntax 1[1] Syntax 2
scalar itself $s ${$sr} $sr->$*[3]
array itself @a @{$ar} $ar->@*[3]
element $a[0] ${$ar}[0] $ar->[0]
slice @a[0,1,2] @{$ar}[0,1,2] $ar->@[0,1,2][3]
index/value slice[2] %a[0,1,2] %{$ar}[0,1,2] $ar->%[0,1,2][3]
last index $#a $#{$ar} $ar->$#*[3]
hash itself %h %{$hr} $hr->%*[3]
element $h{'a'} ${$hr}{'a'} $hr->{'a'}
slice @h{'a','b','c'} @{$hr}{'a','b','c'} $hr->@{'a','b','c'}[3]
key/value slice[2] %h{'a','b','c'} %{$hr}{'a','b','c'} $hr->%{'a','b','c'}[3]
code call (prototype obeyed) func(@args)
call (prototype ignored) &func(@args) &{$cr}(@args) $cr->(@args)
call (inherited @_) &func &{$cr} $cr->&*[3]
glob glob *glob *{$gr} $gr->**[3]
glob slot *glob{ARRAY} *{$gr}{ARRAY} $gr->*{ARRAY}[3]
  1. The curly brackets around $sr, $ar, $hr and $cr are optional when the expression in the curlies is simply a scalar.
  2. Requires Perl 5.20+.
  3. Experimental addition to Perl 5.20.

See also:

Comment on Mini-Tutorial: Dereferencing Syntax
Select or Download Code
Re: Mini-Tutorial: Dereferencing Syntax
by tobyink (Abbot) on Jun 20, 2012 at 19:50 UTC

    It's also worth noting that the following are two completely different things.

    @hash{'key1', 'key2'} $hash{'key1', 'key2'}

    The first one is basically a shorthand for:

    ($hash{'key1'}, $hash{'key2'})

    The second one is:

    $hash{join($;, 'key1', 'key2')}

    ... where $; is the subscript separator, which defaults to \034.

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

      And similarly (though not identically, certainly) for arrays.

      The difference between hash lookups and hash slices has nothing to do with references or how to use them. I shall not add such a note.
Re: Mini-Tutorial: Dereferencing Syntax
by Anonymous Monk on Jun 21, 2012 at 13:06 UTC
    Not mentioned:   $$foo as shorthand for $foo->.

      $$foo is not a shorthand for $foo->.

      >perl -E"$foo=\'foo'; say $$foo;" foo >perl -E"$foo=\'foo'; say $foo->;" syntax error at -e line 1, near "->;" Execution of -e aborted due to compilation errors.

      You're probably thinking of the equivalency of $$foo[...] and $foo->[...] and of $$foo{...} and $foo->{...}, but that's already mentioned.

Re: Mini-Tutorial: Dereferencing Syntax
by ikegami (Pope) on Nov 22, 2013 at 21:53 UTC

    Updated for Perl 5.20.

    ...And previously missing $ar->$#* was added to both Perl and this document.

Re: Mini-Tutorial: Dereferencing Syntax
by DrHyde (Prior) on Nov 25, 2013 at 11:31 UTC
    Huzzah for the slice syntax!

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (6)
As of 2015-07-03 18:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (55 votes), past polls