Perl utilisation/exiger abolute chemin?
Si j'ai un .pm
fichier, est-il une manière que je peux use
, sans le placer sur mon @INC
chemin? Je pense que ce serait plus clair, dans mon cas d'utilisation particulier plus claire que d'utiliser des chemins relatifs ou d'ajouter ce répertoire à @INC
.
Edit: Précisions:
J'espérais pour éviter de devoir parcourir chaque élément de @INC
, et, au lieu de spécifier directement le fichier qui m'intéresse. Par exemple, dans Node.JS, require('something')
va rechercher dans la liste des chemins d'accès, mais require('/specific/something')
va aller directement là où je dis qu'il.
En Perl, je ne suis pas certain que ce soit la même fonctionnalité de require
, mais il semble fonctionner.
Cependant, use
états exigent barewords. Qui m'a laissé un peu perplexe sur la façon d'entrer un chemin d'accès absolu.
use lib
déclaration avant use module
sera correct pour votre cas. Mais pourquoi ne pouvez-vous pas utiliser require
. Il est plus adaptée pour votre problème. Vous pouvez aussi SetEnv PERL5LIB
variable d'environnement dans la conf apache pour appliquer ce répertoire pour l'ensemble du projet ou de l'application.J'ai besoin d'exiger un
.pm
fichier. Je n'ai pas essayé, mais il ne semble pas comme elle aurait travail à droite. J'ai l'habitude d'appeler des fonctions dans le module avec la syntaxe comme CGI::ReadParse();
ou use CGI ':cgi';
. Je ne sais pas comment je pourrais le faire avec require
pour un .pm
fichier, mais si je pouvais le faire avec require
, il serait en effet de résoudre mon problème.Elle fonctionne. Essayez comme ceci
require "Newmodule.pm";
et ensuite appeler Newmodule::subname();
. Il s'exécute bien.OriginalL'auteur Bryan Field | 2013-02-13
Vous devez vous connecter pour publier un commentaire.
Que par la discussion dans les commentaires, je vous recommande d'utiliser
require
lui-même. Comme ci-dessous,Vous pouvez également utiliser d'autres options comme ci-dessous
use lib 'pathto/module';
Cette ligne doit être ajoutée pour chaque fichier que vous souhaitez utiliser le module.à l'aide de
PERL5LIB
variable d'environnement. Définir cette ligne de commande à l'aide de l'exportation ou de l'ajouter à~/.bashrc
de sorte qu'à chaque connexion, il sera ajouté à votre@INC
. Rappelez-vous PERL5LIB ajoute répertoire avant de @INC répertoires. Ainsi, il sera utilisé en premier. Aussi, vous pouvez le définir dans apache httpd.conf à l'aide deOu le mettre dans le bloc BEGIN.
OriginalL'auteur
Vous pouvez utiliser ceci :
Vous pouvez modifier
@INC
par vous-même (temporairement, pas de peur, c'est ce queuse lib
n'trop) :use lib
, sauf qu'qui utiliseunshift
au lieu depop
pour vous assurer que vos propres modules sont ramassés avant toute autre chose du même nom.POST édité en conséquence de repousser le début du tableau.
mettre un module dans le même répertoire que votre programme fonctionne bien si c'est votre répertoire de travail.
. != dirname <program>
par défaut...et ne fonctionne que lorsque . est dans @INC (pas vrai dans souillure mode; pas de même pour les distributions qui l'omettre pour être plus sûr)
Ce dernier commentaire est faux. Perl n'a pas l'air dans le script de l'annuaire pour les modules. regarde dans
.
, mais pas toujours, et.
est souvent le script de l'annuaire, mais loin d'être toujours le cas.OriginalL'auteur Gilles Quenot
Généralement parlant, l'ensemble de la
PERL5LIB
environnement var.Si le module de recherche est destiné à être installé dans un répertoire relatif au script, utilisez la commande suivante:
Cela permettra de gérer correctement les liens symboliques vers le script.
OriginalL'auteur ikegami
Vous pouvez utiliser le Module::Load module
BEGIN
. Il ne fournit pas un moyen de l'importation de symboles, de sorte que vous auriez à ajouter un appel àimport
dans le bloc BEGIN. Au total une mauvaise solution pour que l'OP veut faire.OriginalL'auteur user2050283
FindBin::libs fait le truc:
OriginalL'auteur creaktive