in reply to syntax issue

When curly braces follow a sigil ('@', '%' or '$'), the expression inside the braces is evaluated as a string, which is then treated as the name of a variable to be accessed according to the given sigil. I'm basing that on observed behavior -- I haven't found the particular manual that lays this out in detail; note the following one liner (which crucially does not 'use strict'):
perl -le '%x=(y=>"a"); $a="Z";print ${$x{y}}'
It creates a hash (%x) containing a single key/value pair ("y"/"a"); it also assigns a value of "Z" to variable $a (which happens to be a predefined global variable in perl). Then it uses the hash to look up the string "a", attaches the "$" sigil to that, and returns the value assigned to $a.

If 'use strict' were in effect for the one-liner above, it would die with the error: "Can't use string ("a") as a SCALAR ref while "strict refs" in use at -e line 1." Of course, there are cases where curlies are useful, even with strictures in effect, for referring to chunks of data structures -- e.g.:

use strict; my %hoa = ( foo => [0, 1], bar => [2, 3] ); for ( keys %hoa ) { print " $_ contains: @{$hoa{$_}}\n"; }

It's not that you "can't say" something like @${a} (you can, provided you don't 'use strict') -- it's just that this doesn't do what you thought it would do. (What did you think it would do?) What it actually does is treat the predefined global variable "$a" as a reference to an array, and tries to dereference it so as to return the array. If 'strict refs' is in effect, this is an illegal operation; in the absence of 'strict refs', if $a was not assigned an array reference as its value, you'll just get (undefined) instead of an array.