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 (ignored prototype) | &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] | |
See also:
In reply to Mini-Tutorial: Dereferencing Syntax by ikegami
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |