Have you looked at Perl6::Variables ? It appears to provide the implicit dereferencing you want - at least when accessing elements of an array/hash. (Along with other Perl6 variable related syntax.)
By itself, it does not enforce single type use of symbol names, but that could be done with another module.
Update: Looking at it more, it doesn't attempt to translate @array to \@array so passing an array ref or assigning to a scalar still requires using \@array - but, once passed or assigned, $second = $aref[1] will work.
However, even with a means to enforce single type use of symbol names, I still question whether implicit dereferencing in Perl5 would always be safe.
Note: Perl6 has explicit dereferencing as well, using . instead of ->
In reply to Re: Unifying namespaces of @name and $name to simplify dereferencing?
by RonW
in thread Unifying namespaces of @name and $name to simplify dereferencing?
by LanX
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |