c:\@Work\Perl\monks>perl -le
"use warnings;
use strict;
;;
my $var = 10;
my $hard_ref = \$var;
sub func { return $var; }
sub func_ref { return \ $var; }
;;
print
qq{arbitrary whitespace within the curlies: ${ var }apples \n},
qq{dereference of hard reference: ${ $hard_ref }apples \n},
qq{deref of ref to function return value: ${ \ func() }apples \n}
+,
qq{deref of function returning ref: ${ func_ref() }apples \n},
qq{deref of ref to expression result: ${ \(11 + func()) }apples \n}
+,
;
;;
no strict 'refs';
;;
our $name = 'road';
my $soft_ref = 'name';
;;
print
qq{dereference of symbolic reference: ${ $soft_ref }apples \n},
qq{quoted literal symbolic identifier: ${ 'name' }apples \n},
;
"
arbitrary whitespace within the curlies: 10apples
dereference of hard reference: 10apples
deref of ref to function return value: 10apples
deref of function returning ref: 10apples
deref of ref to expression result: 21apples
dereference of symbolic reference: roadapples
quoted literal symbolic identifier: roadapples
This looks to be mostly a bunch of examples of references, but I think of an expression like ${ symbol_name } as being a dereference of a literal symbol name, so there's a natural transition to a broader consideration of references. See perldata and perlref.
Some questions for consideration:
-
What happens if the no strict 'refs'; statement before the symbolic reference examples is removed?
-
If the package-global our $name ... ; variable is made a lexical (my) variable, e.g.,
my $name = 'road';
what happens?
-
Why are symbolic references Officially Frowned Upon? (hint)
Give a man a fish: <%-{-{-{-<
|