Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1640 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  explication de next if , tie , unpack

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

explication de next if , tie , unpack

n°1805698
donny3
Posté le 28-10-2008 à 22:14:27  profilanswer
 

salut,
 
 
j'essai de comprendre un code dans lequel j ai ceci
 
 

Citation :

 # imprime la liste des utilisateurs
    open F, "< /etc/passwd" or die "Impossible d'ouvrir /etc/passwd : $!";
    while (defined my $ligne = <F> ) {
        next if $ligne =~ /^\s*(?:#|$)/;
        $ligne =~ s/:.*//;
        print $ligne;
    }
    close F;


 
lenext if signifie que si $ligne = /^\s*(?:#|$)/ alors on passe a la ligne suivant et on ne fait pas un print pour cette ligne??
 
dans le code j 'ai aussi des unpack??
est ce que cela parait d'extraire des element du chaine de caractere, de telle position a telle position ???
 
il utilise aussi tie devant des hash
 
vous me direz il y a google, mais la pluspart des explications sont en anglais
et j'ai pas tout tres bien capter
 
merci de votre aide
 
 
 
 

mood
Publicité
Posté le 28-10-2008 à 22:14:27  profilanswer
 

n°1805759
donny3
Posté le 29-10-2008 à 08:45:16  profilanswer
 

j'ai plus de detail sur ce que je capte pas,
si vous pouviez m aider, sur le net j'ai quasiement rien trouver qui me permette de comprendre
( l anglais c est pas mon fort)
j'ai meme ceci, je comprend pas ce que fait le next if ! ??
est ce que sa veut dire que si la ligne est vide on passe à la suivant ?

Code :
  1. open DEMS, "$path/$Demande" ;
  2.  while ( my $line = <DEMS> ) {
  3.   chomp DEMS;
  4.   next if ! $line;


 
dans ce bout de code le /i c'est pour etre insensible a la casse, par contre le /io, pije pas trop,
le /o signifie qu'on ne revalue pas donc pas d'interpolation, je comprend pas ce que sa signifie ?
Le fait d'avoir cela  

Citation :

/^CB$/io && do

: cela signifie si je trouve CB alors je fait ce qu'il y a dans le do ??
pourquoi mettre && si c est cela , en le lisant moi je comprends si CB et ??
le last je pense que j'ai compris, c'est une fois que je rentre  dans le do alors avec le last je ressor
de la boucle foreach.

Code :
  1. foreach ($tab{Fi})  {
  2.    /^CB$/io && do {
  3.     $a  = fonc();
  4.     last;
  5.    };
  6.    /^MASTER$/io && do {
  7.     $a = foncb();
  8.     last;
  9.    };
  10.   }


 
j'ai ceci aussi, je ne comprend pas aussi,
le tie ???
je sais qu'il utilise ce module use Config::IniFiles;, donc je pense que c'est pour iniliser
le tableau avec toute les valeurs du fichier ???
 

Code :
  1. tie my %tabini, 'Config::IniFiles', ( -file => "file.conf" )


 
j'ai une variable declarer comme ceci, je comprend pas le -\d{10} :

Code :
  1. my $var = "Tess".'-\d{10}.tsv;

Message cité 1 fois
Message édité par donny3 le 29-10-2008 à 10:09:37
n°1805786
donny3
Posté le 29-10-2008 à 09:51:21  profilanswer
 

je ne connaissais pas cette synthaxe, juste le fait de faire cela
sa permet d alimenter le tableau avec tout ce qu il y a dans le fichier;
il fait comment , chaque ligne est mise dans une colonne?
 

Code :
  1. open FILE , "$File" ;
  2. my @List = <FILE>;
  3. close FILE;

n°1805979
matafan
Posté le 29-10-2008 à 15:59:35  profilanswer
 

Chanque ligne est mise dans une case du tableau. Si besoin tu peux changer ce que Perl considère comme une "ligne" en modifiant la variable $/ (dollar slash).

n°1805989
gilou
Modérateur
Modzilla
Posté le 29-10-2008 à 16:06:18  profilanswer
 

donny3 a écrit :

salut,lenext if signifie que si $ligne = /^\s*(?:#|$)/ alors on passe a la ligne suivant et on ne fait pas un print pour cette ligne??

Oui,  
next if $ligne = /^\s*(?:#|$)/
est équivalent à  
if $ligne = /^\s*(?:#|$)/ {next;}
 

donny3 a écrit :

dans le code j 'ai aussi des unpack??
est ce que cela parait d'extraire des element du chaine de caractere, de telle position a telle position ???

A priori non, ca extrait d'une chaine de caracteres, un ensemble de valeurs.
 

donny3 a écrit :

il utilise aussi tie devant des hash


Ca sert a camoufler un objet (en perl orienté objet) dans une variable. Lorsqu'on lit la variable, ou lorsqu'on ecrit dedans (ie on lui assigne une valeur), on appelle en fait, sans le voir, des methodes spécifiques à la classe.
 
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1806007
gilou
Modérateur
Modzilla
Posté le 29-10-2008 à 16:33:50  profilanswer
 

donny3 a écrit :

j'ai plus de detail sur ce que je capte pas,
si vous pouviez m aider, sur le net j'ai quasiement rien trouver qui me permette de comprendre
( l anglais c est pas mon fort)
j'ai meme ceci, je comprend pas ce que fait le next if ! ??
est ce que sa veut dire que si la ligne est vide on passe à la suivant ?

Code :
  1. open DEMS, "$path/$Demande" ;
  2.  while ( my $line = <DEMS> ) {
  3.   chomp DEMS;
  4.   next if ! $line;



Ce code m'a l'air faux: c'est probablement chomp $line; qui devrait y figurer, auquel cas, ce code signifierait a priori: virer le dernier caractere de la ligne en cours (le '\n'), et passer a la ligne suivante si la ligne est vide (ie si la ligne ne contenait qu'un '\n' au départ)
 

donny3 a écrit :


dans ce bout de code le /i c'est pour etre insensible a la casse, par contre le /io, pije pas trop,
le /o signifie qu'on ne revalue pas donc pas d'interpolation, je comprend pas ce que sa signifie ?
Le fait d'avoir cela  

Citation :

/^CB$/io && do

: cela signifie si je trouve CB alors je fait ce qu'il y a dans le do ??
pourquoi mettre && si c est cela , en le lisant moi je comprends si CB et ??
le last je pense que j'ai compris, c'est une fois que je rentre  dans le do alors avec le last je ressor
de la boucle foreach.

Code :
  1. foreach ($tab{Fi})  {
  2.    /^CB$/io && do {
  3.     $a  = fonc();
  4.     last;
  5.    };
  6.    /^MASTER$/io && do {
  7.     $a = foncb();
  8.     last;
  9.    };
  10.   }



le o indique qu'on ne compile qu'une seule fois l'expression reguliere (par défaut, elles sont réévaluées a chaque utilisation) ce qui est une optimisation.

Code :
  1. /^CB$/io && do {
  2.     $a  = fonc();
  3.     last;
  4.    };


C'est probablement équivalent à  

Code :
  1. if (/^CB$/io) {
  2.     $a  = fonc();
  3.     last;
  4.    };


 

donny3 a écrit :

j'ai ceci aussi, je ne comprend pas aussi,
le tie ???
je sais qu'il utilise ce module use Config::IniFiles;, donc je pense que c'est pour iniliser
le tableau avec toute les valeurs du fichier ???
 

Code :
  1. tie my %tabini, 'Config::IniFiles', ( -file => "file.conf" )


Ici, tu associes la variable %tabini a un objet de la classe Config::IniFiles, construit avec la parametrisation  ( -file => "file.conf" )
Ca équivaut grosso modo a faire un  
my $tabini = Config::IniFiles->new(-file => "file.conf" ) sauf qu'on cree l'objet indirectement ici.
 

donny3 a écrit :

j'ai une variable declarer comme ceci, je comprend pas le -\d{10} :

Code :
  1. my $var = "Tess".'-\d{10}.tsv;


Pas assez d'info pour répondre ici a priori, car il y a une quote non fermée on dirait.
A priori, dans le contexte d'une expression reguliere, il pourrait s'agir d'un nombre de exactement 10 chiffres, le \d{10}
 
A+,


Message édité par gilou le 29-10-2008 à 16:50:05

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1806026
donny3
Posté le 29-10-2008 à 17:05:29  profilanswer
 

merci pour vos reponses,
 
en faite c est ceci

Citation :

my $var = "Tess".'-\d{10}'.tsv;


donc cela signifie qu on attend un nombre a 10 chiffre en Tess et .tsv ??
 
je me rends compte que le Perl, ça à l'air super puissant comme langage.
Vous auriez des liens html, avec des cours plus pousser parcequ apparamment les liens que je trouve c est de la doc pour debutant de chez debutant

n°1806067
gilou
Modérateur
Modzilla
Posté le 29-10-2008 à 18:05:55  profilanswer
 

donny3 a écrit :

merci pour vos reponses,
 
en faite c est ceci

Citation :

my $var = "Tess".'-\d{10}'.tsv;


donc cela signifie qu on attend un nombre a 10 chiffre en Tess et .tsv ??
 
je me rends compte que le Perl, ça à l'air super puissant comme langage.
Vous auriez des liens html, avec des cours plus pousser parcequ apparamment les liens que je trouve c est de la doc pour debutant de chez debutant


Si $var est utilisée dans une expression reguliere, oui, sinon, il faut voir le code pour se faire une idée.
 
Il y a pas mal de bons livres ou de bonnes docs, mais elles sont essentiellement en anglais
Vous pouvez jeter un oeil a ceci: http://www-esbs.u-strasbg.fr/notes [...] maire.html et a ce cours: http://www.med.univ-rennes1.fr/~po [...] operl.html
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  explication de next if , tie , unpack

 

Sujets relatifs
explication iframeexplication alphaBeta
[Resolu] Equivalent de la commande unpack de PHP/Perl en JavaPetite explication d'un code
explication sur l'enregistrement de donnéeBoutons next et previous
Faire tourner trois boucle for next en même temps ...?explication perl
*** glibc detected *** free(): invalid next size (fast)recuperer l'id auto_incremente du next enregistrement à insrerer
Plus de sujets relatifs à : explication de next if , tie , unpack


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR