57 votes

Comment puis-je savoir si un module Perl est core ou une partie de l’installation standard ?

Comment puis-je vérifier si un module Perl est partie de la base - c'est la partie de l'installation standard?

Je suis à la recherche de:

  • une commande de ligne de commande:
  • un sous-programme Perl/fonction pour vérifier dans le code

Merci à l'avance.

Mise à jour

Peut-être que je devrais ré-écrire la question: "Comment puis-je savoir ce que les modules ont été fourni à l'origine avec le spécifique Perl installation sur une machine?" (mise à jour: en Fait, j'ai maintenant: http://stackoverflow.com/questions/2085516/how-can-i-tell-what-modules-were-originally-provided-with-the-specific-perl-insta )

Étant donné qu'il est maintenant de ne pas être un ensemble de Perl installation standard, au moins la réponse à cette question va me dire ce que j'ai eu à l'origine de l'installation lorsque celle-ci a été installé en premier.

Avec cette connaissance, et si je garde l'original installater image/paquet OU de savoir comment obtenir le exacte chose de nouveau en ligne, puis-je avoir un modèle de Perl installation de plusieurs machines avec la connaissance de ce que les modules seront présents et des modules pas.

Pour clarifier: je suis à la recherche à ce qui est venu avec l'installation à l'origine, ce que les modules ont été fournis dans le cadre de cette installation, ce qui a été construit en. PAS ce qui a été installé depuis.

Et je veux être en mesure de le faire sur la machine qui a l'installation. Donc, pour cela, je serais en s'appuyant sur l'installation d'un enregistrement dans une certaine forme de ce qu'il a à l'origine.

Mise à jour 2

Demandé spin-off de la question: http://stackoverflow.com/questions/2085516/how-can-i-tell-what-modules-were-originally-provided-with-the-specific-perl-insta ( Comment puis-je savoir ce que les modules ont été fourni à l'origine avec le Perl installation sur une machine? )

63voto

toolic Points 23449

La commande corelist du module Module::CoreList permettra de déterminer si un module est Core ou non.

Voici une façon de l’utiliser dans un script. Le `` POD est trop laconique--vous devez aller à la chasse dans le code source pour trouver quelles méthodes à appeler :

8voto

Greg Bacon Points 50449

Vous pouvez le vérifier perlmodlib dans un sous:

my %_stdmod;
sub is_standard_module {
  my($module) = @_;

  unless (keys %_stdmod) {
    chomp(my $perlmodlib = `perldoc -l perlmodlib`);
    die "cannot locate perlmodlib\n" unless $perlmodlib;

    open my $fh, "<", $perlmodlib
      or die "$0: open $perlmodlib: $!\n";

    while (<$fh>) {
      next unless /^=head\d\s+Pragmatic\s+Modules/ ..
                  /^=head\d\s+CPAN/;

      if (/^=item\s+(\w+(::\w+)*)/) {
        ++$_stdmod{ lc $1 };
      }
    }
  }

  exists $_stdmod{ lc $module } ? $module : ();
}

Exemple d'utilisation:

die "Usage: $0 module..\n" unless @ARGV;

foreach my $mod (@ARGV) {
  my $stdmod = is_standard_module $mod;
  print "$0: $mod is ", ($stdmod ? "" : "not "), "standard\n";
}

Sortie:

$ ./isstdmod threads::shared AnyDBM_File CGI LWP::Simple
./isstdmod: threads::shared est standard
./isstdmod: AnyDBM_File est standard
./isstdmod: CGI est standard
./isstdmod: LWP::Simple n'est pas standard

perldoc est très certainement partie de la Perl est vrai noyau et de l'installation standard. La source de distribution de perl 5.10.1, par exemple, contient

  • perldoc.PL, génère perldoc dans le cadre d'une installation standard
  • perlmodlib.PL, génère perlmodlib.pod dans le cadre d'une installation standard

Ce n'est pas une nouveauté. Perl 5.6.0, sur dix ans, perlmodlib dans le cadre de son vrai-core, d'installation standard.

Les Installations qui ne contiennent pas ces éléments sont non-standard. Oui, je sais qu'il peut sembler académique à partir de votre point de vue, mais votre fournisseur d'emballage permis une installation non standard qui casse sinon programmes de travail.

Avec Debian package manager, vous pouvez obtenir le standard de Perl installation avec

$ apt-get --install-recommends installer perl

7voto

brian d foy Points 71781

Il n'y a vraiment aucune une telle chose comme "de base" de plus. Il sert à être un standard de la distribution Perl, mais beaucoup de gens n'ont pas un standard de la distribution Perl. Il y a le système d'exploitation de la modifier en ajoutant ou en supprimant des modules, la modification de modules, et ainsi de suite. Vous ne pouvez pas compter sur la distribution standard étant en fait la norme. Certaines distributions linux ne comprend même pas la documentation Perl en tant que partie de la base de l'installation Perl.

Vous mentionnez que vous ne pouvez pas utiliser de Module::CoreList car il n'est pas de base, mais vous pouvez créer des fichiers, vous pouvez installer le module. Vous pouvez même prétendre que vous l'avez écrit vous-même.

3voto

Powerlord Points 43989

Pour les vraiment paresseux, il y a la liste de Modules de base sur le site perldoc.perl.org.

0voto

codaddict Points 154968
  • De coomand ligne: Disons que vous voulez savoir si le module Tie::Hash est installé.
    Pour le savoir, exécuter les opérations suivantes à partir de la ligne de commande:

    perl -MTie::Hash -e 1 Si vous n'obtenez pas de sortie de la commande ci-dessus alors que le module est installé; si vous obtenez une erreur, il n'est pas installé.

  • Pour faire cette vérification à partir de l'intérieur de la script, vous pouvez faire usage de Module::Load::Conditionnel

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