If the thing inside the brackets is a single identifier, it's the disambiguation. If it's more, i.e. there is an operation involved (like concatenation in this case), it's the symbolic reference.
map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
| [reply] [d/l] |
As I understand it, symbolic referencing starts when you start generating symbols
at run time. After all, in the statement
my $foo = 'bar';
foo is a symbol, an identifier or name. There might be other
variables with the same name, distinguished by their sigils, but all
this is known at compile time.
The other distinguishing feature of old-school symbolic
referencing in Perl is that it only applies to package-globals.
Of course, the barrier between compile time and run time is very
permeable in Perl, and one can slip back and forth between these
states in all kinds of tricksy (and useful) ways. Using
eval, one can manufacture endless symbols and syntax for
functions, variables and so on and build entire programs at run
time. All of this run-time compilation goes on within appropriate
scoping constraints, whereas "symbolic referencing" (as the term is used
in Perl) for package-globals is always... well, global.
Give a man a fish: <%-{-{-{-<
| [reply] [d/l] [select] |