Names
We’ve talked about storing values in variables, but the variables themselves (their names and their associated definitions) also need to be stored somewhere. In the abstract, these places are known as namespaces. Perl provides two kinds of namespaces, which are often called symbol tables and lexical scopes.[41] You may have an arbitrary number of symbol tables or lexical scopes, but every name you define gets stored in one or the other. We’ll explain both kinds of namespaces as we go along. For now we’ll just say that symbol tables are global hashes that happen to contain symbol table entries for global variables (including the hashes for other symbol tables). In contrast, lexical scopes are unnamed scratchpads that don’t live in any symbol table but are attached to a block of code in your program. They contain variables that can only be seen by the block. (That’s what we mean by a scope. The lexical part just means, “having to do with text”, which is not at all what a lexicographer would mean by it. Don’t blame us.)
Within any given namespace (whether global or lexical), every
variable type has its own subnamespace, determined by the sigil. You
can, without fear of conflict, use the same name for a scalar
variable, an array, or a hash (or, for that matter, a filehandle, a
subroutine name, a label, or your pet llama). This means that $foo and @foo are two different variables. Together
with the previous rules, it also means that $foo[1] is an element of @foo totally unrelated ...
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