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 :

modules dans des sous-répertoires


Sujet :

Modules Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Points : 17
    Points
    17
    Par défaut modules dans des sous-répertoires
    bonjour,

    je crée une application qui commence à prendre un peu d'ampleur et, soucieux de m'y retrouver à l'avenir, j'aimerais mettre mes différents modules dans des sous répertoires.

    Exemple: une partie de mon application donne accès à la base de donnée (+ abstraction pour les types que j'y stoque) et se compose de 4 modules:
    - eXist.pm;
    - archives.pm;
    - emission.pm;
    - sequence.pm;
    qui représentent chacune une classe.

    pour plus de simplicité, j'ai créé un module les appellant tous les 4:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    package eXist_interface;
     
    use eXist;
    use archives;
    use emission;
    use archives;
     
    ###############################################################################
    1; # Ainsi le require ou le use réussi...

    Et j'utilisais ces classes simplement en faisant un use eXist_interface dans le script que j'écrivais (et que je lançais dans le même répertoire que tous ces packages).

    Maintant j'aimerais mettre tous ces packages (plus des tas d'autres fichiers qui y sont reliés) dans un répertoire eXist_interface, et pouvoir l'appeller depuis le répertoire parent.

    Je pensais que ça allait marcher tout seul en faisant un "use eXist_interface" mais non.

    J'ai donc essayé "use eXist_interface::eXist_interface" (eXist_interface étant le répertoire dans lequel se trouve mon package eXist_interface.pm), il a réussi à loader eXist_interface.pm, mais plante lorsqu'il doit loader un des quatres modules!

    J'ai aussi essayé d'ajouter le répertoire eXist_interface au début de mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/usr/bin/env perl
     
    push(@INC, "./eXist_interface");
     
    use strict;
    use Tk;
    use eXist_interface;
    Mais sans résultat, on dirait qu'il fait les use AVANT le push!


    une idée?

    merci d'avance,

    Laurent.

  2. #2
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    le push @INC ne fonctionne pas, il faut utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    use lib "./eXist_interface";
    Mais si tu avais lu la FAQ, tu l'aurais su !!!

    EDIT : apparemment le push @INC fonctionne, mais à une condition spéciale, voir ci-dessous

  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
    le push @INC fonctionne (c'est ce qu'utilise lib, enfin un unshift @INC mais le probleme est le meme).
    le probleme est que le push doit se faire avant que les librairies soit chargée, hors avec un use elle le sont avant l'execution du script lui meme.
    Donc la solution est soit de faire un require, soit d'utiliser un bloque BEGIN pour forcer l'execution du push :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    push(@INC, "./eXist_interface");
     
    use strict;
    use Tk;
    require eXist_interface;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BEGIN {
        push(@INC, "./eXist_interface");
    }
     
    use strict;
    use Tk;
    use eXist_interface;
    mais bon dans tous les cas lib est plus elegant

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

Discussions similaires

  1. Selection de valeur de champs dans des sous formulaires
    Par Hydex dans le forum VBA Access
    Réponses: 5
    Dernier message: 05/06/2007, 15h17
  2. Requête filtrée dans des sous-formulaires
    Par Beavis Man dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/12/2006, 23h31
  3. Recherche de fichiers dans des sous répertoires
    Par Mimi Bulles dans le forum Langage
    Réponses: 8
    Dernier message: 25/04/2006, 16h41
  4. Filtrages dans des sous-formulaires
    Par Smint dans le forum Access
    Réponses: 4
    Dernier message: 20/09/2005, 13h56
  5. Chemin d'accès des fichiers dans des sous rep
    Par Le Veilleur dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/11/2004, 14h37

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