2008-12-10 8 views
8

J'ai plusieurs modules Perl installés sur ma machine hôte au ~/perl, comment les ajouter au chemin du module Perl? Définir PERL5LIB ou unshift les chemins à @INC fonctionne sûrement, mais la variable d'environnement n'aide pas lors de l'exécution en tant que script CGI et la manière @INC n'est pas très portable. Y a-t-il un meilleur moyen? Cela doit être un problème commun, ai-je oublié quelque chose?Comment puis-je définir le chemin d'inclusion de Perl pour les modules d'un script CGI?

Répondre

6

PERL5LIB fonctionne très bien pour les scripts CGI. Vous devez juste définir la variable au bon endroit, comme la configuration du serveur. Quel serveur web utilisez-vous? Pour Apache, j'utilise la directive SetEnv de mod_env.

@INC est portable. Les chemins que vous y mettez peuvent ne pas être les mêmes sur toutes les machines, mais vous ne devriez pas avoir de problème avec la variable elle-même.

Avez-vous lu les entrées FAQ dans perlfaq8:

+0

Merci, je ne connaissais pas la directive SetEnv. C'est exactement ce que je cherchais. – zoul

+0

Cela ne fonctionne pas sur toutes les configurations de serveur - certaines désactivent SetEnv, et d'après ce que je lis, d'autres ne le permettent que pour définir les variables d'environnement qui commencent par HTTP_. Une sorte de mesure de sécurité, je pense. – user1618143

9

Un nettoyeur façon de le faire est imo:

use lib "/path/" ; 

il y a d'autres intéressantes et de bonnes façons de le faire que l'on peut trouver ici:

http://www.slideshare.net/pfig/cpan-training-presentation/

Aussi, re: CGI scripts, vous pouvez définir des chemins PERL5LIB pour votre Env CGI, cela dépend de votre hébergeur. Certains Webhosts permettent un contrôle spécifique des variables env pour l'environnement CGI, et vous devez simplement les définir, d'autres peuvent avoir une liste de "permis" qui permet aux variables visibles à l'heure de démarrage d'apparaître dans la portée locale.

Peut aider à lire sur la façon de faire cela sur votre serveur HTTP spécifique.

Il y a une autre option, si le réglage ENV est pas à votre goût: local::lib

qui recherche des chemins prédéfinis automatiquement.

+1

+1 Juste à noter que PERL5LIB est ignoré si vous avez taint mode allumé ... http: //perldoc.perl.org/perlsec.html#Taint-mode-and-%40INC – draegtun

Questions connexes