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

Web Perl Discussion :

appel de fonction via une variable


Sujet :

Web Perl

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : avril 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut appel de fonction via une variable
    Bonjour,

    je m'explique,
    j'utilise le perl avec cgi, donc jai une page index et une page fonction

    page index.cgi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $CIBLE = $FORM->param('cible');
    if (!$CIBLE){
    	view_sommaire();
    }
    else{
    	view_$CIBLE();
    }
    Page fonction.cgi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sub view_sommaire {
    	print "<h2>Sommaire</h2>";
    	print "<a href=index.cgi?cible=shearchVisio>Mise en Relation</a><br>";
    }
     
    sub view_shearchVisio {
    	print "<h2>Mise en Relation - Recherche Visio</h2><hr>";
    	print "<form action='index.cgi?cible=ListVisio' method='post'>";
    	print "Nom de la visio: <input name='visio' type='text'> ";
    	print "<input name='submit' value='Rechercher' type='submit'>";
    	print "</form>";	
    }
    le problème est quand je clique sur le lien "Mise en Relation", la variable $CIBLE recupère bien "shearchVisio"
    mais quand j'appel la fonction view_shearchVisio de cette façon view_$CIBLE cela me retourne une erreur.

    Y'a t-il une maniére de faire pour inclure une variable dans un nom de fonction comme je désire le faire ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 465
    Points
    12 465
    Billets dans le blog
    1
    Par défaut
    Hum, à supposer que j'aie compris ce que tu veux faire, je pense qu'il est préférable de faire un tableau ou un hash de références vers des fonctions.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : avril 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    J'ai modifié un peu mon code mais ça me fait toujours pareil..

    En gros ce que je cherche à faire, c'est appeler ma fonction de cette façon :
    au lieu de faire comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MiseRel::viewShearchVisio();
    Et donc quand je fais view$CIBLE, en erreur il me dit qu'il connait pas la fonction view donc c'est qu'il ne lit pas le contenu de ma variable dans le nom de la fonction.

    Comment faire ??

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : avril 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    J'ai trouvé une petite alternative,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my $CIBLE;
    $CIBLE=$POST->param('cible');
    if (!$CIBLE){ 
    	MiseRel::viewSommaire();
    }
    else{
    	MiseRel::viewShearchVisio() if ($CIBLE=='ShearchVisio');
                  # le mieux serait MiseRel::view$CIBLE();
    }
    Mais bon ça fait une ligne if pour chaque paramètre différent, c'est pas le but.

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 465
    Points
    12 465
    Billets dans le blog
    1
    Par défaut
    Je te redis que la bonne solution est sans doute un hash de références sur des fonctions, ce que l'on appelle assez souvent dispatch table ou table de distribution. Il n'y a pas à avoir peur de ces grands mots, c'est assez simple.

    Voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    use strict;
    use warnings;
     
    my %dispatch = ( sommaire => \&view_sommaire ,
                           searchVisio => \&view_searchVisio);
     
     
    for my $cible (qw /sommaire searchVisio/) {
    	$dispatch{$cible}->(); # appelle successivement view_sommaire et view_searchVisio
    }
     
    sub view_sommaire {
    	print "<h2>Sommaire</h2>";
    	print "<a href=index.cgi?cible=shearchVisio>Mise en Relation</a><br>";
    }
     
    sub view_searchVisio {
    	print "<h2>Mise en Relation - Recherche Visio</h2><hr>";
    	print "<form action='index.cgi?cible=ListVisio' method='post'>";
    	print "Nom de la visio: <input name='visio' type='text'> ";
    	print "<input name='submit' value='Rechercher' type='submit'>";
    	print "</form>";	
    }
    La table de distribution c'est ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my %dispatch = ( sommaire => \&view_sommaire ,
                           searchVisio => \&view_searchVisio);
    Cela dit en fait que si j'ai le mot clef sommaire, je dois appeler la fonction view_sommaire, etc. Tu ajoutes simplement une nouvelle ligne du même type pour chaque cible et chaque fonction.

    La partie ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for my $cible (qw /sommaire searchVisio/) {
    	$dispatch{$cible}->(); # appelle successivement view_sommaire et view_searchVisio
    }
    est juste mon test du bon fonctionnement. $dispatch{$cible}->() appelle la fonction référée par $cible dans la table de distribution.

    Cela m'a bien imprimé successivement le contenu des fonctions view_sommaire et view_searchVisio.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : avril 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Super !

    Merci beaucoup, ça marche tout seul

    Je ne connaissais pas cette méthode ! (Débutant en Perl )

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

Discussions similaires

  1. [Débutant] Appel d'une fonction via une variable
    Par byrong dans le forum ASP.NET
    Réponses: 1
    Dernier message: 19/10/2013, 11h26
  2. [XSLT 1.0] Mettre le résultat de l'appel d'une fonction dans une variable
    Par Giovanny Temgoua dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 16/01/2012, 17h47
  3. VBS appel dynamique d'une fonction via une variable ?
    Par Wannapy dans le forum VBScript
    Réponses: 2
    Dernier message: 07/01/2010, 18h01
  4. Appeler une fonction grace à une variable
    Par guillaume0612 dans le forum Général Python
    Réponses: 15
    Dernier message: 28/02/2009, 18h43
  5. Appel d'une méthode via une variable.
    Par seiryujay dans le forum Général Java
    Réponses: 7
    Dernier message: 14/11/2006, 09h56

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