2009-06-08 6 views
5

Comment puis-je trouver l'emplacement site_perl standard (non spécifique à l'arc)? Est-il prudent de simplement boucler @INC et de trouver le chemin se terminant par "site_perl", ou existe-t-il un moyen standard de le faire?Comment trouver le répertoire site_perl standard pour Perl?

La raison pour essayer de trouver ceci, est que j'ai un très grand projet construit à partir de centaines de modules individuels, tous avec leurs propres fichiers Makefile.PL (à peu près chaque fichier .pm a été construit comme son propre CPAN module). Parallèlement à cela, chaque module peut avoir des artefacts (modèles, .cgi, etc), dans divers endroits, tous qui doivent être déployés à divers endroits, rien n'est standard. C'est la première étape pour essayer de maîtriser cela, en ayant essentiellement un seul Makefile capable de tout trouver et de tout déployer, la prochaine étape sera de l'obtenir dans une mise en page raisonnable dans le contrôle de version.

J'ai passé du temps à essayer de le faire avec des outils d'installation standard, mais je n'ai pas eu de chance.

+1

Pourquoi recherchez-vous site_perl? Si vous nous dites ce que vous essayez de faire, nous pouvons probablement vous dire comment le faire. :) –

Répondre

7
C:\Temp> perl -MConfig -e "print qq{$_ => $Config{$_}\n} for grep { /site/ } keys %Config" 

    d_sitearch => define 
    installsitearch => C:\opt\perl\site\lib 
    installsitebin => C:\opt\perl\site\bin 
    installsitehtml1dir => 
    installsitehtml3dir => 
    installsitelib => C:\opt\perl\site\lib 
    installsiteman1dir => 
    installsiteman3dir => 
    installsitescript => C:\opt\perl\site\bin 
    sitearch => C:\opt\perl\site\lib 
    sitearchexp => C:\opt\perl\site\lib 
    sitebin => C:\opt\perl\site\bin 
    sitebinexp => C:\opt\perl\site\bin 
    sitehtml1dir => 
    sitehtml1direxp => 
    sitehtml3dir => 
    sitehtml3direxp => 
    sitelib => C:\opt\perl\site\lib 
    sitelib_stem => 
    sitelibexp => C:\opt\perl\site\lib 
    siteman1dir => 
    siteman1direxp => 
    siteman3dir => 
    siteman3direxp => 
    siteprefix => C:\opt\perl\site 
    siteprefixexp => C:\opt\perl\site 
    sitescript => 
    sitescriptexp => 
    usesitecustomize => define 

Ou, comme @ysth souligne dans les commentaires, vous pouvez utiliser:

C:\Temp> perl -V:.*site.* 

sur Windows et

$ perl '-V:.*site.*' 

en * coquilles nix.

1

Il n'est pas prudent de boucler sur @INC car il peut être modifié par du code ou par l'environnement, et, par conséquent, peut contenir plusieurs répertoires se terminant par site_perl.

Si vous essayez de déterminer où un module donné est installé, utilisez %INC.

+0

Non, j'essaie de trouver où installer un module spécifique. J'ai un haut niveau de contrôle sur les cibles d'installation, mais je ne peux pas à ce stade changer @INC, ni en raison de la complexité je peux utiliser MakeMaker/etc. –

+0

perl -V | grep sitelib recherche le -Dsitelib = valeur –

+0

@Chas. Owens: installsitelib, pas sitelib – ysth

2

Exécutez simplement perl -V. Il imprimera le @INC par défaut à la fin.

5

Y a-t-il une raison de ne pas utiliser l'un des programmes d'installation de module (ExtUtils::MakeMaker, Module::Build, Module::Install)?

Mais si vous le devez, le répertoire est disponible (après le chargement Config) en tant que $Config::Config{'installsitelib'}. Notez que certaines plates-formes peuvent configurer perl de telle sorte que ce répertoire n'apparaisse pas littéralement dans @INC, mais plutôt dans un autre répertoire symlinked vers le répertoire installsitelib.

Questions connexes