explication de next if , tie , unpack

explication de next if , tie , unpack - Perl - Programmation

Marsh Posté le 28-10-2008 à 22:14:27    

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
 
 
 
 

Reply

Marsh Posté le 28-10-2008 à 22:14:27   

Reply

Marsh Posté le 29-10-2008 à 08:45:16    

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
Reply

Marsh Posté le 29-10-2008 à 09:51:21    

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;

Reply

Marsh Posté le 29-10-2008 à 15:59:35    

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).

Reply

Marsh Posté le 29-10-2008 à 16:06:18    

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é!  --
Reply

Marsh Posté le 29-10-2008 à 16:33:50    

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é!  --
Reply

Marsh Posté le 29-10-2008 à 17:05:29    

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

Reply

Marsh Posté le 29-10-2008 à 18:05:55    

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é!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed