Por que você precisa de $ ao acessar matriz e hash em Perl?

Como arrays e hashes só podem conter escalares em Perl, por que você tem que usar $ para dizer ao interpretador que o valor é escalar ao acessar matriz ou elementos hash? Em outras palavras, supondo que você tenha uma matriz@myarray e um hash%myhash, por que você precisa fazer:

$x = $myarray[1];
$y = $myhash{'foo'};

em vez de apenas fazer:

$x = myarray[1];
$y = myhash{'foo'};

Por que o acima é ambíguo?

Não seria ilegal o código Perl se fosse qualquer coisa menos um $ nesse lugar? Por exemplo, todos os itens abaixo não são ilegais em Perl?

@var[0];
@var{'key'};
%var[0];
%var{'key'};