• [^] # Re: Quel est le besoin ?

    Posté par . En réponse au message Recherche commande. Évalué à 3.

    bon c'est parti pour l'explication de code ;)

    déjà on va le segmenter et le commenter

    # perl -pe c'est plus ou moui l'équivalent de while($_ = <STDIN>)
    # qu'on peut simplement écrire (while <STDIN>)
    # ou en plus court (while(<>)
    # donc on reprend
    # 
    #while(<STDIN>) { # pour toute les ligne pas present (-pe)
     $c+= # on ajoute à c - bouh c'est pas déclaré par défaut c'est 0
     ( #je rajoute une parenthèses pour mieux suivre 
     /\+/ # si y'a un + dans la ligne 
     & # bitwise and pour économiser un caractère et pas écrire &&
     !$b # not $b ($b représente un état (est-ce que y'avait un + sur la ligne précédente...)
     ) ? # donc si l'évaluation de y'a un + et b == false (ou indéfini)
     $b=1 # $b prend la valeur 1 (et on renvoi 1)
     : $b=/\+/,0 # $b prend true si y'a un plus, et on renvoi 0... GRUIIIIK
    #} # pas présent fin de la boucle -pe 
     }{ # définition du bloc END peut aussi s'écrire END{
     print$c # on appel print avec comme paramètre $c... aurait du s'écrire print "$c\n";

    bref à part pour le code golf je déconseille fortement ce code

    sinon d'un point de vu algorithmique

    on ajoute 1 au compteur si y'a un + sur la ligne et que sur la ligne précédente y'avait pas de +
    puis on affiche le compteur.

    et si on veut faire mois incantation lovecraftienne ça donne a peu près ça (de tête j'ai pas testé)

    #!/bin/env perl
    use strict;
    my $cpt = 0;
    my $hadPlus = false;
    while(<>) {
     if (/\+/) {
     if (!$hadPlus){
     $cpt += 1 ;
     $hadPlus=true;
     }
     } else {
     $hadPlus = false;
     }
    }
    print "$cpt\n"

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent