Whenever you can use the name of a variable, you can use a block that evaluates to a reference instead. For example, the following are valid syntax for specifying an array:
@NAME # If you have the name e.g. @array @BLOCK # If you have a reference e.g. @{ $ref }
This is the "circumfix syntax" illustrated in the table below.
An alternative syntax colloquially known as the "arrow notation" is easier to read, but requires Perl 5.20+ in some cases. This is the "postfix syntax" illustrated in the table below.
Direct | Using References | |||
---|---|---|---|---|
Circumfix Syntax[1] | Postfix Syntax | |||
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 | func(@args) | ||
call (prototype ignored) | &func(@args) | &{$cr}(@args) | $cr->(@args) | |
call (inherited @_) | &func | &{$cr} | $cr->&*[3] | |
glob | itself | *glob | *{$gr} | $gr->**[3] |
slot | *glob{ARRAY} | *{$gr}{ARRAY} | $gr->*{ARRAY}[3] |
- The curly brackets around $sr, $ar, $hr, $cr and $gr are optional when the contents of the curlies is simply a scalar.
- Requires Perl 5.20+.
- Requires Perl 5.24+. Available in Perl 5.20+ by adding both use feature qw( postderef ); and no warnings qw( experimental::postderef );, or by adding use experimental qw( postderef );. This is safe because the then-experimental feature was accepted into Perl without change.
See also:
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Mini-Tutorial: Dereferencing Syntax
by tobyink (Canon) on Jun 20, 2012 at 19:50 UTC | |
by jdporter (Chancellor) on Jun 20, 2012 at 21:51 UTC | |
by ikegami (Patriarch) on Sep 17, 2012 at 05:36 UTC | |
Re: Mini-Tutorial: Dereferencing Syntax
by ikegami (Patriarch) on Nov 22, 2013 at 21:53 UTC | |
by Anonymous Monk on Nov 23, 2013 at 07:56 UTC | |
Re: Mini-Tutorial: Dereferencing Syntax
by Anonymous Monk on Jun 21, 2012 at 13:06 UTC | |
by ikegami (Patriarch) on Sep 17, 2012 at 05:03 UTC | |
Re: Mini-Tutorial: Dereferencing Syntax
by DrHyde (Prior) on Nov 25, 2013 at 11:31 UTC |
Back to
Meditations