Mais je suis obligé de bosser dessus...

J'ai horreur cette syntaxe si particulière qui donne l'impression que Larry Wall a absolument tenu à utiliser les 94 symboles de la table ASCII...
Pourquoi diable se faire chier à différentier les variables en fonction de leur type avec des $, @ et autre % ?
Qui a besoin de systématiquement aplatir les tableaux imbriqué et les arguments ?
Pourquoi emmerder les développeurs avec une distinction entre référence et variable ? Peut être par nostalgie du C...
Et surtout, voici un petit exemple qui montre à quel point ce langage est tordu :
use strict;
use Data::Dumper;

my %h = (
    'a' => (
        'b' => 'c',
    ),
);
print Dumper(\%h);

Il y a une erreur dans ce code. J'ai utilisé des () au lieu des {} pour le deuxième hash. Ce qui fait que je n'ai pas une référence vers mon deuxième hash... N'importe quel langage aurai levé une exception devant une tel erreur... Au lieu de cela, Perl affiche tout fièrement :
$VAR1 = {
          'c' => undef,
          'a' => 'b'
        };
Il à aplatit le hash en décalant tout ! Hallucinant ! Qui peut bien avoir besoin d'une telle "fonctionnalité" ?

La bonne solution est :
use strict;
use Data::Dumper;

my %h = (
    'a' => {
        'b' => 'c',
    },
);
print Dumper(\%h);

Ce qui donne :
$VAR1 = {
          'a' => {
                   'b' => 'c'
                 }
        };

Je ne vois aucune raison pour justifier une telle complexité !