Je n'ai pas codé en Perl depuis longtemps. Maintenant, j'ai recommencé et je suis tombé sur une situation intéressante lors de la programmation de deux packages dans un seul fichier '.pm'. Jusqu'à présent, je pensais que si je définissais deux packages dans un fichier (par exemple ConfigData et RuntimeData), je pouvais définir une variable (déclarée avec 'my') avec le même nom (par exemple my $instance) pour chaque package sans conflit. Voici un code minimal pour illustrer ceci :
package Jabs::ConfigData;
use strict;
use warnings;
my $instance;
sub new {
my ($class) = @_;
unless (defined $instance) {
$instance = bless {}, $class;
}
return $instance;
}
1; # Fin de 'ConfigData'
package Jabs::RuntimeData;
use strict;
use warnings;
my $instance;
sub new {
my ($class) = @_;
unless (defined $instance) {
$instance = bless {}, $class;
}
return $instance;
}
1; # Fin de 'RuntimeData'
J'ai appelé perl -c test2.pm et j'ai reçu le message suivant en retour :
"my" variable $instance masque la déclaration antérieure dans le même scope à la ligne 27 de test2.pm.
test2.pm syntax OK
Maintenant, il n'est pas clair pour moi pourquoi le scope devrait être le même. Parce que 'my $instance' est défini dans deux packages différents. Je suis sur Ubuntu 24.04 LTS et Perl5 (révision 5 version 38 sous-version 2)
Est-ce que quelqu'un pourrait peut-être m'expliquer mon problème de compréhension ?