Perl: libapt-pkg-perl AptPkg :: Cache-> nouveau comportement étrange sous précision

J’ai un problème très étrange avec le constructeur de l’object AptPkg::Cache dans le package précis de libapt-pkg-perl (v. 0.1.25) .

Le script perl est conçu pour télécharger un paquet Debian pour trois architectures différentes (i386, armel, armhf). Pour chaque architecture, je fais ce qui suit:

  1. Configurez AptPkg::Config '$_config' avec les bons parameters et listes de paquets pour l’architecture souhaitée.

  2. Créez l’object de cache avec AptPkg::Cache->new .

  3. Appelez la méthode AptPkg::Cache->policy pour créer l’object AptPkg::Policy .

  4. Appelez la méthode AptPkg::Policy->candidate("program-name") .

  5. Téléchargez le package pour l’architecture sélectionnée.

Cela fonctionne très bien avec Ubuntu Lucid, mais avec Ubuntu Precise, je ne peux que télécharger le paquet pour la première architecture définie. Pour les deux autres architectures, il n’y aura pas de candidat à l’installation (la méthode AptPkg::Policy->candidate("Package-Name") ne renvoie pas d’object).

J’ai essayé de construire une solution de contournement et j’ai trouvé une solution à la façon dont le script fonctionne pour les trois architectures, sans problèmes, en particulier:

Si je crée l’object de cache (avec AptPkg::Cache->new ) deux fois de suite, cela fonctionne et le script télécharge le paquet Debian pour les trois architectures:

 my $cache = AptPkg::Cache->new; $cache = AptPkg::Cache->new; 

Je suis sûr que le problème a quelque chose à voir avec la méthode AptPkg::Cache->new parce que j’ai vérifié tout le rest, ce qui pourrait causer le problème, deux fois. Toutes les variables de configuration sont définies correctement et j’obtiens même un Hash différent pour AptPkg::Cache->new pour chaque architecture, mais il semble que AptPkg::Cache->new quelque chose d’important.

Je ne suis pas très familier avec Perl, donc je vous demande si quelqu’un peut expliquer pourquoi le script fonctionne avec la solution de contournement mais pas sans. En outre, cela semble assez étrange si vous avez la même ligne de code deux fois dans votre script.

Peut-être que vous avez atteint ce bogue – https://bugs.launchpad.net/ubuntu/+source/libapt-pkg-perl/+bug/994509

Il y a un script pour tester si vous êtes affecté. Si c’est autre chose, envisagez de soumettre un rapport de bogue.

edit: Je viens de voir que c’est 11 mois: /