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

Langage Perl Discussion :

appel de module


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Points : 8
    Points
    8
    Par défaut appel de module
    Bonjour, je n'ai pas trop l'habitude d'utiliser un forum, malheureusement je n'arrive pas à trouver de solution à mon problème bien que celui-ci soit secondaire!

    en faite, je suis en train de finir un projet et je me confronte à l'appel d'une fonction qui se trouve dans un module à part, le plus simple est de mettre la partie concerné.

    j'ai donc ceci qui marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    my $action=$actionList[$i][3];
     
    require "$server->{directory}$action/$action.pm";
    $action->$action($server,\$client);
    ceci fonctionne très bien, mais je dois me servir d'une variable qui me semble inutile

    j'aurai voulu l'avoir sous cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    require "$server->{directory}$actionList[$i][3]/$actionList[$i][3].pm";
    $actionList[$i][3]->$actionList[$i][3]($server,\$client);
    évidemment, ça ne fonctionne pas

    par contre, ça fonctionne sous cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    my $action=$actionList[$i][3];
     
    require "$server->{directory}$actionList[$i][3]/$actionList[$i][3].pm";
    $actionList[$i][3]->$action($server,\$client);
    je n'arrive pas à comprendre ou se situe le probleme, help me

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je trouve au contraire l'utilisation de $action très utile, notamment pour la simplification en terme de lecture de code, et sans doute également en terme d'exécution ($action est utilisée plusieurs fois dans la suite).
    Cela dit, l'interprétation de la chaine du require échoue peut-être à cause d'un manque de délimiteurs de symbole ({}).
    As-tu essayé d'afficher le contenu du fichier de la fonction require ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $req = "$server->{directory}$actionList[$i][3]/$actionList[$i][3].pm";
    As-tu essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require "$server->{directory}$actionList[$i]->[3]/$actionList[$i]->[3].pm";
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require "$server->{directory}${$actionList[$i]}[3]/${$actionList[$i]}[3].pm";
    Quelle erreur obtiens-tu ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    merci Philou67430 de ton attention,

    en faite, je me suis mal exprimé mais c'est l'appel de la fonction qui pose problème, on ne peut pas appeler une fonction a partir d'un élément du tableau, mais pas de souci si on temporise avec une variable ...

    j'ai donc revu ma façon de faire, comme chaque module "action" est différent, je nomme l'action "action", ça résout le probleme

    pourquoi faire compliqué quand on peut faire simple ...

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je vois en fait que tu utilises un nom de fonction (une méthode de classe pourrait-on dire même, puisque ce nom de fonction est celui du nom du module, et que tu l'appelle avec l'opération -> précédé du nom du module, à la manière d'une méthode de classe). Ceci ne devrait pas être autorisé avec le pragma "use strict" il me semble.
    Et même si ça l'est, pourquoi ne pas avoir nommé cette méthode de classe d'une nom unique (genre "Service") qui serait appelé pour tous les modules de la même manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $actionList[$i][3]->Service($server,\$client);
    Ça règle à la fois le problème d'appel "en une expression", et le problème de références non strict à des fonctions.

    Cela dit, je comprends que cette suggestion ne puisse pas être adoptée (réorganisation importante de l'architecture du projet).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    j'ai eu le me raisonnement et j'avoue que la réorganisation était de taille (50 modules), 24h pour que tout refonctionne ce qui reste encore raisonnable à mes yeux

    j'ai créée une classe, ça pique moins les yeux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my $action=$actionList[$i][3]->new(\$server,\$client);
     
    $action->connection();
    if($client->{user}->{connected}){
      $action->action();
    }

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

Discussions similaires

  1. Comment appeler un module ?
    Par Jean_Benoit dans le forum Access
    Réponses: 7
    Dernier message: 27/12/2006, 06h49
  2. Appeler un module
    Par melodyyy dans le forum Général VBA
    Réponses: 5
    Dernier message: 01/12/2006, 11h15
  3. Comment faire appel à des modules ?
    Par wilsony dans le forum Langage
    Réponses: 2
    Dernier message: 09/07/2006, 13h50
  4. [forms 9i] appel de module
    Par sofian001 dans le forum Oracle
    Réponses: 8
    Dernier message: 21/11/2005, 20h16
  5. Problème d'appel de module.
    Par TomPad dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 10h24

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