Plus précisément $$var déréférence le pointeur qui est dans $var (comme *var en C). Sauf que si $var contient une chaîne (et non pas un pointeur vers un scalaire) alors ça lis le contenu de la variable dont le nom est la chaîne en question (c'est ce qui s'appelle une référence symbolique).
Un programme lisible note généralement ${...} le fait de déréférencer un pointeur vers un scalaire (et non pas seulement $. Donc ${$var} au lieu de $$var. Et un programme perl "strict" (c'est-à-dire un tant soit peu correctement écris) n'utilise jamais de référence symbolique, mais seulement des vrais références. Par exemple l'exemple de Hors-Charte devient:
$var = 3;
$banane = \$var;
print ${$var};
(bon, pour que ce soit vraiment propre il faudrait déclarer les variables).
Bref ton programme est horrible (c'est le genre de programmes qui contribuent à donner à Perl sa réputation de langage illisible), et pas que pour ces questions de style de pointeur, je ne sais pas d'où tu le sort, mais le lire peut être mauvais pour ta santé...