Vous ne tombez pas dans une boucle infinie à cause de la table de hachage %INC
:
% INC
Le hachage %INC
contient des entrées pour chaque nom de fichier inclus par les do
, require
ou use
opérateurs . La clé est le nom de fichier que vous avez spécifié (avec les noms de modules convertis en chemins d'accès), et la valeur est l'emplacement du fichier trouvé. L'opérateur require
utilise ce hachage pour déterminer si un fichier particulier a déjà été inclus.
Aussi, rappelez-vous que use Module LIST
est équivalent à
BEGIN { require Module; Module->import(LIST); }
Ainsi, lorsque le programme principal utilise Module1
, la séquence suivante se produit:
require Module1
(du paquet main
)
require Module2
(du paquet Module 1
)
require Module1
(ne fait rien parce que Module1
est déjà %INC
)
Module1->import
(dans le paquet Module2
)
Module2->import
(dans le paquet Module1
)
Module1->import
(dans le paquet main
)
Qu'est-il arrivé lorsque vous avez essayé ? –
Si vous êtes dans cette situation, je suggère que vous devriez jeter un oeil à votre design actuel, car il est cassé. Une dépendance circulaire dans les bibliothèques est juste fausse. Dans un langage interprété comme Perl, vous pourriez vous en sortir, mais cela ne fonctionnera pas pour un langage compilé. Vous devriez envisager de reconcevoir les modules affectés dans cette situation. – Htbaa