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 :

aide pour explication synthaxe perl


Sujet :

Langage Perl

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Points : 144
    Points
    144
    Par défaut aide pour explication synthaxe perl
    Salut,

    je dois essayer de comprendre un code perl
    mais il y a certaines element que je ne capte pas, et dont je ne peux trouver d explication sur google :

    je ne comprend aps le next if ! :sa veut dire que si la ligne est vide on passe a la suivante ?
    cela signifie next if ! -s "$path/$x ???
    next if ! $line ?
    /^CB$/io && do { : cela signifie que si on trouve CB dans la ligne alors on entre dans la boucle, mais que signifie le /io ??i c est pour la casse et o ?
    le last veut dire qu'on sort du foreach et qu on traite l'autre element du tableau ?

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    opendir REP, "$path";
     
    	foreach my $x (sort grep /$v/o, readdir REP) {
     
    		next if ! $x;
    		next if ! -s "$path/$x";
     
     
    		open OFF, "$path/$x" ;
    		while ( my $line = <OFF> ) {
     
     
    			next if ! $line;
     
    			foreach ($tab{lie})  {
    				/^CB$/io && do {
    					$res  = fonca ( %tab );
    					last;
    				};
     
    				/^MASTER$/io && do {
    					$res = foncb ( %tab );
    					last;
    				};
     
    			}
     
     
    		}
     
    		close OFF;
     
    	}
    	closedir REP;
    merci de votre aide

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    je ne comprend aps le next if ! :sa veut dire que si la ligne est vide on passe a la suivante ?
    cela signifie next if ! -s "$path/$x ???
    next if ! $line ?
    Cela signifie que l'on passe à l'itération suivante si $ligne est faux au sens de Perl, ce qui signifie undef, vide (' '), ou de valeur nulle (0 et '0').

    /^CB$/io && do { : cela signifie que si on trouve CB dans la ligne alors on entre dans la boucle, mais que signifie le /io ??i c est pour la casse et o ?
    pas exactement trouvé CB dans la ligne mais que la ligne doit être exactement CB sans rien devant ni derrière (cf ancres ^et $).
    i permet bien de rendre insensible à la casse
    o afin de n'exécuter cette évaluation une seule fois
    Il y a un chouette tuto sur les expressions régulières dans la FAQ de ce forum.

    le last veut dire qu'on sort du foreach et qu on traite l'autre element du tableau ?
    Je pense que last permet de sortir de la boucle en cours.
    http://perldoc.perl.org/functions/last.html

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Je pense que last permet de sortir de /^CB$/io && do{...} et de poursuivre le foreach.
    Non, le last sort bien du foreach pour continuer sur le prochain while. do { block } ne compte pas comme une boucle (ce qui est normal puisque ce n'est pas une boucle).

  4. #4
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    ^^ oui, oui je venais de vérifier sur perldoc et de corriger mon post
    désolée

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Points : 144
    Points
    144
    Par défaut
    merci de vos reponse
    pour le /o je m etais renseigner et j'ai lu un explication comme la tienne mais le truc c est qu en pratique, je comprends toujours pas ce que sa signifie de n'exécuter cette évaluation une seule fois ?
    pour cela
    next if ! $x;
    next if ! -s "$path/$x";

    en faite il test si $x a une valeur (il doit contenir un fichier .tif parceque $v = "fic".'-\d{10}.tif'; et je pense quelquechose comme cela fic1.tif jusqu a fic10.tif)
    et ensuite si le repertoire $path qui contient $x est non null, c est une double securité en faite, pour ne traiter que les fichier qui existe et non null;
    si jamais $x est null, il passe à l autre fichier dans repertoire, il ne fait pas la suite du traitement(dans la liste des repertoire qu il a dans le readir);

    dc si $x existe , il ouvre le fichier,et tant qu il trouve une ligne il boucle;
    tab est un hash et donc chaque ligne qu'il trouve, il la decompose et rempli les different champs du hash avec;
    ensuite il boucle sur le hash et si dans le champ lie (tab{lie} ) il trouve CB alors il lance un traitement et apres le traitemen il sort avec le last du foreach
    et remonte dans le while, pour traiter une autre ligne du fichier;

    c'est bien cela SVP?

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Le o dans m//o sert à dire à Perl que le pattern utilisé dans la regexp ne doit être compilé qu'une fois. Ca sert dans un cas comme le tiens, ou tu as une variable qui sert de regexp, et où la regexp est évaluée plusieurs fois (ici, dans une boucle foreach) mais sans que la variable change.

    Imagine que tu ais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my $pattern = "toto";
    while (<>) {
        ...
        if (/$pattern/) ...;
        ...
    }
    Alors Perl ne sais pas si $pattern change ou pas entre deux passage de boucles. En conséquence, il doit re-compiler la regexp /$pattern/ à chaque tour, puisque $pattern a pu changer.

    Maintenant si tu sais que $pattern ne changera jamais pendant le déroulement de la boucle, c'est évidemment du gachis. Dans ce cas tu peux dire /$pattern/o, qui indique à Perl qu'il peut se contenter de compiler la regexp la première fois qu'elle est rencontrée (au premier passage dans la boucle), et de réutilisée pas regexp ensuite. Si la boucle est parcourue N fois, tu économises N-1 compilations de regexp.

Discussions similaires

  1. Aide pour Bot IRC Perl
    Par furious_mac dans le forum Langage
    Réponses: 3
    Dernier message: 06/09/2010, 18h24
  2. Une aide pour explication d'un script
    Par jibidy dans le forum Langage
    Réponses: 2
    Dernier message: 08/07/2008, 13h45
  3. Besoin d'aide pour traduire du perl
    Par king_neo2001 dans le forum Langage
    Réponses: 5
    Dernier message: 22/05/2007, 15h10
  4. aide pour debutant en perl
    Par donny dans le forum Langage
    Réponses: 3
    Dernier message: 30/08/2006, 18h13
  5. besoin d'aide pour de l'administration réseau en perl
    Par benzure dans le forum Programmation et administration système
    Réponses: 18
    Dernier message: 30/03/2006, 08h26

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