46 votes

Comment puis-je trouver le fichier Perl chargé lorsque j'utilise un module?

en Perl, quand je dois utiliser < module name> < version>, le système trouve la .h pour la bibliothèque quelque part dans @INC chemin.

Est-il un moyen fiable pour laquelle le fichier a été chargé?

71voto

derobert Points 26258

Oui, %INC contient le chemin d'accès complet d'un module a été chargé de.

Exemple:

$ perl -M'Data::Dump qw(pp)' -e 'pp(\%INC)'
{
  "Data/Dump.pm"         => "/usr/share/perl5/Data/Dump.pm",
  "Exporter.pm"          => "/usr/share/perl/5.10/Exporter.pm",
  "List/Util.pm"         => "/usr/lib/perl/5.10/List/Util.pm",
  "Scalar/Util.pm"       => "/usr/lib/perl/5.10/Scalar/Util.pm",
  "XSLoader.pm"          => "/usr/lib/perl/5.10/XSLoader.pm",
  "overload.pm"          => "/usr/share/perl/5.10/overload.pm",
  "strict.pm"            => "/usr/share/perl/5.10/strict.pm",
  "vars.pm"              => "/usr/share/perl/5.10/vars.pm",
  "warnings.pm"          => "/usr/share/perl/5.10/warnings.pm",
  "warnings/register.pm" => "/usr/share/perl/5.10/warnings/register.pm",
}

8voto

skiphoppy Points 16563

Si le module a de la documentation pod, et si vous pouvez garantir que l'utilitaire perldoc dans votre CHEMIN appartient à la même perl, qui est l'exécution de votre script, alors cette commande vous donnera souvent la réelle fichier trouvé:

perldoc -l ModuleName

7voto

user1121750 Points 31

perl -M'LWP' -e 'use Data::Dumper; print Dumper \%INC' | grep LWP

Ce sera la liste de la LWP module emplacement sur le disque et aussi la liste des modules chargés à l'intérieur de LWP.

      'LWP.pm' => '/usr/lib/perl5/5.10.0/LWP.pm',
      'LWP/Protocol.pm' => '/usr/lib/perl5/5.10.0/LWP/Protocol.pm',
      'LWP/UserAgent.pm' => '/usr/lib/perl5/5.10.0/LWP/UserAgent.pm',

6voto

brian d foy Points 71781

Vous voulez regarder dans l' %INC variable qui enregistre le nom du fichier chargé pour les bibliothèques que vous chargez avec do, requireou use. Voir perlvar pour plus de détails.

4voto

mikegrb Points 1003

Il y a un bon nombre de modules CPAN pour trouver cette information, les candidats les plus probables look: Module::Rechercher, Module::Qui, et du Module::Recherchez. Je serais probablement aller avec le Module::Rechercher:

use strict;
use warnings;
use Module::Locate qw/locate/;

my $to_find = "Some::Module";

print "Perl would use: ", scalar locate($to_find), "\n";

Dans un contexte de liste de localiser retourne toutes les copies de Certains::Module en fonction de @INC.

Edit: derobert suggère une bien meilleure façon, je ne savais pas %INC déjà eu... Ce module de solution serait toujours utile si vous avez voulu savoir avant de charger le module où il allait être chargé de.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X