IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

ajout le lib dans @inc ?


Sujet :

Modules Perl

  1. #1
    Membre actif
    Femme Profil pro
    Inscrit en
    Août 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Août 2006
    Messages : 109
    Points : 269
    Points
    269
    Par défaut ajout le lib dans @inc ?
    Bonjour

    Je souhaite depuis un programme principal, appeler des sous programmes externes.
    Rien de plus simple que d'utiliser : use lib nomlib
    Seulement je ne souhaite pas, pour des question de portabilité, mettre le chemin d'accès à la bibliotheque en dur dans mon PGM.
    Ma première idée etait de passer par une variable d'environnement :
    use lib nomvariable
    mais celà ne fonctionne pas et j'ai un beau message d'erreur me disant que le pgm n'est pas trouvé dans @INC.
    Comment puis-je ajouter cette librairie à @INC ?

    Merci de votre aide
    Isabelle

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Billette
    Bonjour

    Je souhaite depuis un programme principal, appeler des sous programmes externes.
    Rien de plus simple que d'utiliser : use lib nomlib
    Seulement je ne souhaite pas, pour des question de portabilité, mettre le chemin d'accès à la bibliotheque en dur dans mon PGM.
    Ma première idée etait de passer par une variable d'environnement :
    use lib nomvariable
    mais celà ne fonctionne pas et j'ai un beau message d'erreur me disant que le pgm n'est pas trouvé dans @INC.
    Comment puis-je ajouter cette librairie à @INC ?

    Merci de votre aide
    Isabelle
    Bonjour,

    si j'ai bien compris, tu as des fonctions externes regroupées dans un package (.pm) ?

    Pour tes raisons de portabilité justement, où comptes-tu déposer ce package par rapport au programme, une fois celui-ci déployé ?

    Parce que si tu ne peux pas :
    - déployer le script Perl + le package .pm dans le même répertoire
    - déclarer en dur le chemin vers le package dans le script

    Il ne te reste plus que 2 solutions :
    - ou bien rajouter le chemin vers le package dans le path de ta machine. Ainsi, en faisant un simple "use mon_package", Perl cherchera dans tous les path déclarés et finira bien par le trouver.
    - ou bien rajouter toutes les fonctions du package dans ton script, ce que tu ne souhaites pas je suppose.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    Pour trouvé un module dans un chemin ajouté "à la main" à @INC il faut le faire avant que les modules en question soient chargés. Hors les "use" sont executée avant l'execution d'un script (ou qu'ils soient dans le code). donc deux possibilitées s'offrent à toi:
    - mettre ton push @INC dans un bloque BEGIN
    - faire un "require" de ton module au lieu d'un "use", et ce apres le push @INC
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par pospos
    Pour trouvé un module dans un chemin ajouté "à la main" à @INC il faut le faire avant que les modules en question soient chargés. Hors les "use" sont executée avant l'execution d'un script (ou qu'ils soient dans le code). donc deux possibilitées s'offrent à toi:
    - mettre ton push @INC dans un bloque BEGIN
    - faire un "require" de ton module au lieu d'un "use", et ce apres le push @INC
    Oui mais elle ne souhaite justement pas écrire en dur le chemin vers le package dans son script Perl

    Or, ton bloc BEGIN, il se trouve dans le script

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    ton bloc BEGIN peut lire un argument passé en ligne de commande ou une variable d'environnement, et d'ailleurs le pragma lib le peut aussi.
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Billette
    Ma première idée etait de passer par une variable d'environnement :
    use lib nomvariable
    mais celà ne fonctionne pas et j'ai un beau message d'erreur me disant que le pgm n'est pas trouvé dans @INC.
    Comment puis-je ajouter cette librairie à @INC ?

    Merci de votre aide
    Isabelle
    Cette forme devrait marcher.
    N'oublie pas qu'il faut mettre cette ligne avant l'appel du module en question et que les variables environnementales du shell sont accessible en Perl par l'intermédiaire du hash %ENV.

    --
    Jedaï

  7. #7
    Membre actif
    Femme Profil pro
    Inscrit en
    Août 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Août 2006
    Messages : 109
    Points : 269
    Points
    269
    Par défaut
    Bonjour

    J'ai résolu le problème avec l'utilisation de
    use lib ($ENV{MAVARIABLE});
    require("nompgm.pm");


    Merci beaucoup
    Isabelle

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/06/2009, 11h11
  2. Réponses: 1
    Dernier message: 24/02/2009, 15h07
  3. Ajout de lib dans un jar généré
    Par shogoune dans le forum ANT
    Réponses: 4
    Dernier message: 12/12/2008, 14h25
  4. [GD] Ajouter la lib GD dans PHP
    Par pyramix dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/09/2006, 13h41
  5. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo