Braces, Brackets, and Quoting
In the previous section, we pointed out that ${identifier} is not treated as a symbolic
reference. You might wonder how this interacts with reserved words, and
the short answer is that it doesn’t. Despite the fact that push is a reserved word, these two
statements print “pop on
over”:
$push = "pop on ";
print "${push}over";The reason is that, historically, this use of braces is how Unix shells have isolated a variable name from subsequent alphanumeric text that would otherwise be interpreted as part of the name. It’s how many people expect variable interpolation to work, so we made it work the same way in Perl. But with Perl, the notion extends further and applies to any braces used in generating references, whether or not they’re inside quotes. This means that:
print ${push} . "over";or even (since spaces never matter):
print ${ push } . "over";both print “pop on over”,
even though the braces are outside of double quotes. The same rule
applies to any identifier used for subscripting a hash. So instead of
writing:
$hash{ "aaa" }{ "bbb" }{ "ccc" }you can just write:
$hash{ aaa }{ bbb }{ ccc }or:
$hash{aaa}{bbb}{ccc}and not worry about whether the subscripts are reserved words. So this:
$hash{ shift }is interpreted as $hash{"shift"}. You can force interpretation
as a reserved word by adding anything that makes it more than a mere
identifier:
$hash{ shift() }
$hash{ +shift }
$hash{ shift @_ }Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access