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] map et fonction perso


Sujet :

Langage Perl

  1. #1
    tyx
    tyx est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Points : 54
    Points
    54
    Par défaut [langage] map et fonction perso
    Hello à tous,

    Dans le cadre d'une petite modification d'un script existant, je suis revenu qql années en arrière le temps d'une après-midi pour me remettre au perl.

    Je dois avouer que je suis un peu rouillé et qu'après qql heures de luttes, je touche au but mais un point reste obscur.

    Le code incriminé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub checkTop {
                    my ($m,@top) = @_ ;
                    my $v ;
                    if (/\*\*\*(.*)\*\*\*/,$m) {
                            my $v = $1 ;
                            print $v ;
                            if (/$v/,@top) { return $m . '[TOP]' ; }
                    }
            }
    et l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    map(checkTop($_,@tm),@count) ;
    @tm contient une lecture d'un fichier contenant des noms précis et @count le résultat d'un traitement extérieur mais ca reste une liste. Le principe étant de filter la liste générale (@count) en mettant en avant les noms précis que l'on peut retrouver à l'intérieur.

    Je recup donc dans ma fonction, sur chaque itération, le contenu entre *** et ***, qui est suceptible d'apparaitre dans mon @tm. Si c'est le cas, je return à mon map, le paramètre avec une concaténation pour le différencier.

    Voilà, aucune erreur, mais mon count est absent de ces modifications alors qu'un print avant le return, indique bien que le prog y passe.

    Je dois avouer que je fatigue, donc l'erreur est peut-être énorme.

    Dsl du pavé que je viens d'écrire, je voulais être le plus précis possible.

    Merci a ceux qui se pencheront dessus : )

  2. #2
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    À première vue, je vois deux problèmes.

    Premier problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (/\*\*\*(.*)\*\*\*/,$m) {
    Es-tu sûr que tu ne devrait pas faire la commande suivante à la place?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ($m =~ m/\*\*\*(.*)\*\*\*/) {
    Second problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    map(checkTop($_,@tm),@count) ;
    Le premier argument de map doit être un block, comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    map { checkTop($_, @tm) } @count;
    Vois si ça aide ton problème.

  3. #3
    tyx
    tyx est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    Merci pour avoir pris du temps : )


    J'ai testé avec les modifs, même résultat.

    A noter qu'en l'état actuel, le code "fonctionne". les if sont passés dans les bons cas etc. Il est certainement vrai que c'est sans doute pas tjrs très élégant mais je pense surtout que le souci vient de la mécanique de retour pour le map que je ne trouve documenté nulle part : (

  4. #4
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    À noter aussi que map ne modifira pas @count. Pour avoir le résultat de map dans une variable, tu dois faire une assignation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my @resultats = map { checkTop($_, @tm) } @count;

  5. #5
    tyx
    tyx est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    Grand merci : )

    C'est exactement le souci qu'il y avait. Je pensais que ca modifait le @count.

    Ca roule maintenant !

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

Discussions similaires

  1. [langage] Appel de fonction dans un lien
    Par drakan dans le forum Langage
    Réponses: 1
    Dernier message: 17/05/2005, 19h30
  2. [langage] Pointeur sur fonction
    Par Fanch.g dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2004, 11h43
  3. [langage] hash et fonction
    Par perlaud dans le forum Langage
    Réponses: 5
    Dernier message: 21/09/2004, 20h54
  4. [langage] problème avec fonction read
    Par domidum54 dans le forum Langage
    Réponses: 2
    Dernier message: 30/03/2004, 21h42
  5. [langage] Creer une fonction qui met en majuscule ?
    Par Cyber@l dans le forum Langage
    Réponses: 6
    Dernier message: 04/12/2003, 19h44

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