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 :

[langage] pb avec use strict ;


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [langage] pb avec use strict ;
    j'aimerais passer le nom d'une fonction par une variable , mais le use strict m'en empeche ( le & qui supprime les declarations ??? )

    prog:
    my $essai= "fonct";
    &$essai();

    sub fonct()
    {print"ça passe !!!";}

    message d'erreur :
    can't use string ("fonct") as a subroutine ref while "strict ref"

    existe t'il un moyen pour pouvoir faire cela en conservant use strict

    merci

  2. #2
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Salut.

    Je pense pas que ce soit possible. Un nom de routine n'est pas interprété comme une chaine de caractères, mais ce n'est que mon avis. Et dans ton exemple, il faudrait faire une concaténation déjà car le $essai(), je pense que ça aime pas trop...
    Si tu disais exactement ce que tu veux faire, on pourrait peut être t'aider à trouver une autre solution.
    Verre vide je te plains, verre plein, je te vide.

  3. #3
    Membre habitué
    Inscrit en
    Août 2003
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 156
    Points : 187
    Points
    187
    Par défaut
    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
     
    my %fonctions = (    #listage des fonctions
    		"f1" => \&f1,
    		"f2" => \&f2,
                     ...
                     "fn" => \&fn,
    );
     
     
    my $fonction = $type . $n; #construction du nom de la fonction
    my $param;
     
    if ($fonctions{$fonction}) {  #test de l'existence de la fonction
       my $result = $fonctions{$fonction}->($param);  # appel de la fonction
    }
    si c'est pas beau ça
    -- plus les choses changent...
    plus elles restent les mêmes
    --snake plissken
    pb résolus +20

  4. #4
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Très très intéressant, j'ai encore beaucoup à apprendre...
    Verre vide je te plains, verre plein, je te vide.

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    c'est pas beau ça monsieur , c'est lumineux !!!

    merci darkloran , cette façon de faire m'ouvre d'autres horizons qui m'arrangent fortement.

  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
    Je ne devrais pas le dire , et la solution proposée par Darkloran est la solution à utiliser, mais si on veut vraiment utiliser des références symboliques avec un "use strict;" dans les parages, il faut faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    use strict;
    my $essai= "fonct";
     
    {
      no strict "refs";
      &$essai();
    }
     
    sub fonct()
    {print"ça passe !!!";}
    Si on veut déjà être un peu plus propre, on peut faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    use strict;
    my $essai= \&fonct;
     
    &$essai();
     
    sub fonct()
    {print"ça passe !!!";}
    En tout cas, on ne le répêtera jamais assez : les références symboliques, c'est mal !

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

Discussions similaires

  1. impossible de comparer une chaine avec use strict
    Par erc_fun dans le forum Langage
    Réponses: 6
    Dernier message: 05/10/2006, 10h56
  2. [langage] problème avec fonction read
    Par domidum54 dans le forum Langage
    Réponses: 2
    Dernier message: 30/03/2004, 20h42
  3. [langage] Pb avec Active perl :s
    Par Cetras dans le forum Langage
    Réponses: 2
    Dernier message: 02/09/2003, 13h28
  4. [langage] probleme avec un hash de hash
    Par planetevoyage dans le forum Langage
    Réponses: 4
    Dernier message: 06/06/2003, 12h55

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