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:
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|
|