in reply to Re^6: Filehandle/array naming (updated)
in thread Filehandle/array naming

My confusion is: where does using { } brackets for disambiguation (as in print 'aa${foo}bb') stop and symbolic references start as in ${foo.$n} or ${foo.''} . Did I get { } brackets for disambiguation wrong (e.g. as in the unix shell use-case: ${XYZ} )?

Replies are listed 'Best First'.
Re^8: Filehandle/array naming (updated)
by choroba (Cardinal) on Nov 20, 2020 at 21:08 UTC
    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]
Re^8: Filehandle/array naming (updated)
by AnomalousMonk (Archbishop) on Nov 20, 2020 at 21:45 UTC

    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:  <%-{-{-{-<