je m'aperçois que je comprends pas bien ce que fait "=~", en
particulier sur l'exemple ci-dessous, et la lecture de perlop ne
m'aide pas beaucoup...
# attention, sur une seule ligne...
perl -e '$s="ThomasvO";$c=$s;$s=~"\L$s\E";$c="\L$c\E";$i="nok";$i="ok"
if ($c eq $s);print "$s - $c - $i\n";'
je ne comprends pas pourquoi $s et $c sont différents... pour moi,
j'étais censé avoir soit le même résultat, soit 1||0 dans $s, suivant
si la chaîne originale est en "lower-case"...
merci,
--
Thomas vO - <http://perso.enstimac.fr/~vanouden/>
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Gaborit
À (at) Fri, 15 May 2009 10:06:39 +0200, Thomas vO <vanouden+ écrivait (wrote):
je m'aperçois que je comprends pas bien ce que fait "=~", en particulier sur l'exemple ci-dessous, et la lecture de perlop ne m'aide pas beaucoup...
# attention, sur une seule ligne... perl -e '$s="ThomasvO";$c=$s;$s=~"L$sE";$c="L$cE";$i="nok";$i="ok" if ($c eq $s);print "$s - $c - $in";'
je ne comprends pas pourquoi $s et $c sont différents... pour moi, j'étais censé avoir soit le même résultat, soit 1||0 dans $s, suivant si la chaîne originale est en "lower-case"...
L'opérateur =~ n'est pas une *affectation*. Il sert juste à choisir sur quelle chaîne de caractère on applique une opération de recherche, substitution ou translittération.
Ce qui est à droite de =~ contient l'opération à effectuer (m/.../, s/.../.../ ou tr/.../). Si aucune de ces trois opérations n'est précisée, c'est une recherche qui est effectuée.
Ce qui est à gauche de =~ indique sur quelle chaîne doit s'effectuer l'opération ci-dessus.
Donc lorsque tu écris :
$s = "abcde12": $s=~"L$sE";
c'est équivalent à :
$s =~ m/Labcde12E/;
Il y a donc recherche du motif Labcde12E dans $s. Le résultat de cette recherche est perdu (puisque tu ne récupères pas le résultat de l'opérateur =~). Et $s n'est pas modifié.
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
À (at) Fri, 15 May 2009 10:06:39 +0200,
Thomas vO <vanouden+news@rf.esuoluot-vinu.invalid> écrivait (wrote):
je m'aperçois que je comprends pas bien ce que fait "=~", en
particulier sur l'exemple ci-dessous, et la lecture de perlop ne
m'aide pas beaucoup...
# attention, sur une seule ligne...
perl -e '$s="ThomasvO";$c=$s;$s=~"L$sE";$c="L$cE";$i="nok";$i="ok"
if ($c eq $s);print "$s - $c - $in";'
je ne comprends pas pourquoi $s et $c sont différents... pour moi,
j'étais censé avoir soit le même résultat, soit 1||0 dans $s, suivant
si la chaîne originale est en "lower-case"...
L'opérateur =~ n'est pas une *affectation*. Il sert juste à choisir
sur quelle chaîne de caractère on applique une opération de recherche,
substitution ou translittération.
Ce qui est à droite de =~ contient l'opération à effectuer (m/.../,
s/.../.../ ou tr/.../). Si aucune de ces trois opérations n'est
précisée, c'est une recherche qui est effectuée.
Ce qui est à gauche de =~ indique sur quelle chaîne doit s'effectuer
l'opération ci-dessus.
Donc lorsque tu écris :
$s = "abcde12":
$s=~"L$sE";
c'est équivalent à :
$s =~ m/Labcde12E/;
Il y a donc recherche du motif Labcde12E dans $s. Le résultat de cette
recherche est perdu (puisque tu ne récupères pas le résultat de
l'opérateur =~). Et $s n'est pas modifié.
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
À (at) Fri, 15 May 2009 10:06:39 +0200, Thomas vO <vanouden+ écrivait (wrote):
je m'aperçois que je comprends pas bien ce que fait "=~", en particulier sur l'exemple ci-dessous, et la lecture de perlop ne m'aide pas beaucoup...
# attention, sur une seule ligne... perl -e '$s="ThomasvO";$c=$s;$s=~"L$sE";$c="L$cE";$i="nok";$i="ok" if ($c eq $s);print "$s - $c - $in";'
je ne comprends pas pourquoi $s et $c sont différents... pour moi, j'étais censé avoir soit le même résultat, soit 1||0 dans $s, suivant si la chaîne originale est en "lower-case"...
L'opérateur =~ n'est pas une *affectation*. Il sert juste à choisir sur quelle chaîne de caractère on applique une opération de recherche, substitution ou translittération.
Ce qui est à droite de =~ contient l'opération à effectuer (m/.../, s/.../.../ ou tr/.../). Si aucune de ces trois opérations n'est précisée, c'est une recherche qui est effectuée.
Ce qui est à gauche de =~ indique sur quelle chaîne doit s'effectuer l'opération ci-dessus.
Donc lorsque tu écris :
$s = "abcde12": $s=~"L$sE";
c'est équivalent à :
$s =~ m/Labcde12E/;
Il y a donc recherche du motif Labcde12E dans $s. Le résultat de cette recherche est perdu (puisque tu ne récupères pas le résultat de l'opérateur =~). Et $s n'est pas modifié.
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
Thomas vO
salut Paul,
À (at) Fri, 15 May 2009 10:45:07 +0200, Paul Gaborit nous disait (told us):
Donc lorsque tu écris :
$s = "abcde12": $s=~"L$sE";
c'est équivalent à :
$s =~ m/Labcde12E/;
Il y a donc recherche du motif Labcde12E dans $s. Le résultat de cette recherche est perdu (puisque tu ne récupères pas le résultat de l'opérateur =~). Et $s n'est pas modifié.
merci. du coup, peut-on récupérer le résultat de =~ ? j'imagine que oui, vu que le test if ($s =~ m/Labcde12E/) va donner quelque-chose...
-- Thomas vO - <http://perso.enstimac.fr/~vanouden/>
salut Paul,
À (at) Fri, 15 May 2009 10:45:07 +0200,
Paul Gaborit <Paul.Gaborit@invalid.invalid> nous disait (told us):
Donc lorsque tu écris :
$s = "abcde12":
$s=~"L$sE";
c'est équivalent à :
$s =~ m/Labcde12E/;
Il y a donc recherche du motif Labcde12E dans $s. Le résultat de cette
recherche est perdu (puisque tu ne récupères pas le résultat de
l'opérateur =~). Et $s n'est pas modifié.
merci. du coup, peut-on récupérer le résultat de =~ ? j'imagine que
oui, vu que le test
if ($s =~ m/Labcde12E/)
va donner quelque-chose...
--
Thomas vO - <http://perso.enstimac.fr/~vanouden/>
À (at) Fri, 15 May 2009 10:45:07 +0200, Paul Gaborit nous disait (told us):
Donc lorsque tu écris :
$s = "abcde12": $s=~"L$sE";
c'est équivalent à :
$s =~ m/Labcde12E/;
Il y a donc recherche du motif Labcde12E dans $s. Le résultat de cette recherche est perdu (puisque tu ne récupères pas le résultat de l'opérateur =~). Et $s n'est pas modifié.
merci. du coup, peut-on récupérer le résultat de =~ ? j'imagine que oui, vu que le test if ($s =~ m/Labcde12E/) va donner quelque-chose...
-- Thomas vO - <http://perso.enstimac.fr/~vanouden/>
Paul Gaborit
À (at) Fri, 15 May 2009 11:09:20 +0200, Thomas vO <vanouden+ écrivait (wrote):
merci. du coup, peut-on récupérer le résultat de =~ ? j'imagine que oui, vu que le test if ($s =~ m/Labcde12E/) va donner quelque-chose...
Bien sûr qu'on peut récupérer le résultat de l'opérateur =~ (comme de n'importe quel autre opérateur d'ailleurs).
Pour =~, le résultat sera celui de l'opération appliquée. Dans l'exemple ci-dessus, c'est donc le résultat de m/.../ qui change de nature selon qu'on est dans un contexte scalaire ou dans un contexte de liste et selon les modificateurs appliqués...
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
À (at) Fri, 15 May 2009 11:09:20 +0200,
Thomas vO <vanouden+news@rf.esuoluot-vinu.invalid> écrivait (wrote):
merci. du coup, peut-on récupérer le résultat de =~ ? j'imagine que
oui, vu que le test
if ($s =~ m/Labcde12E/)
va donner quelque-chose...
Bien sûr qu'on peut récupérer le résultat de l'opérateur =~ (comme de
n'importe quel autre opérateur d'ailleurs).
Pour =~, le résultat sera celui de l'opération appliquée. Dans
l'exemple ci-dessus, c'est donc le résultat de m/.../ qui change de
nature selon qu'on est dans un contexte scalaire ou dans un contexte
de liste et selon les modificateurs appliqués...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
À (at) Fri, 15 May 2009 11:09:20 +0200, Thomas vO <vanouden+ écrivait (wrote):
merci. du coup, peut-on récupérer le résultat de =~ ? j'imagine que oui, vu que le test if ($s =~ m/Labcde12E/) va donner quelque-chose...
Bien sûr qu'on peut récupérer le résultat de l'opérateur =~ (comme de n'importe quel autre opérateur d'ailleurs).
Pour =~, le résultat sera celui de l'opération appliquée. Dans l'exemple ci-dessus, c'est donc le résultat de m/.../ qui change de nature selon qu'on est dans un contexte scalaire ou dans un contexte de liste et selon les modificateurs appliqués...
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
espie
In article , Thomas vO <vanouden+ wrote:
salut Paul,
À (at) Fri, 15 May 2009 10:45:07 +0200, Paul Gaborit nous disait (told us):
Donc lorsque tu écris :
$s = "abcde12": $s=~"L$sE";
c'est équivalent à :
$s =~ m/Labcde12E/;
Il y a donc recherche du motif Labcde12E dans $s. Le résultat de cette recherche est perdu (puisque tu ne récupères pas le résultat de l'opérateur =~). Et $s n'est pas modifié.
merci. du coup, peut-on récupérer le résultat de =~ ? j'imagine que oui, vu que le test if ($s =~ m/Labcde12E/) va donner quelque-chose...
Oui, on peut. Mais ca n'est pas systematique, ca depend beaucoup de ce que tu fais avec ta chaine. Typiquement, ca n'est pas frequent du tout avec s///: pas mal de substitutions sont juste la pour nettoyer. Par exemple:
s/#.*//; # suppression de commentaires s/(s)s+/$1/g; # suppression d'espaces en trop.
souvent, ca s'utilise effectivement pour des match, pour faire un parser rudimentaire, genre:
if (m/^(.*?)=(.*)$/) { my ($var, $value) = ($1, $2); ... } else # autre cas de figure ...
In article <87skj6spfj.fsf@rf.esuoluot-vinu.invalid>,
Thomas vO <vanouden+news@univ-toulouse.fr> wrote:
salut Paul,
À (at) Fri, 15 May 2009 10:45:07 +0200,
Paul Gaborit <Paul.Gaborit@invalid.invalid> nous disait (told us):
Donc lorsque tu écris :
$s = "abcde12":
$s=~"L$sE";
c'est équivalent à :
$s =~ m/Labcde12E/;
Il y a donc recherche du motif Labcde12E dans $s. Le résultat de cette
recherche est perdu (puisque tu ne récupères pas le résultat de
l'opérateur =~). Et $s n'est pas modifié.
merci. du coup, peut-on récupérer le résultat de =~ ? j'imagine que
oui, vu que le test
if ($s =~ m/Labcde12E/)
va donner quelque-chose...
Oui, on peut. Mais ca n'est pas systematique, ca depend beaucoup de ce
que tu fais avec ta chaine. Typiquement, ca n'est pas frequent du tout avec
s///: pas mal de substitutions sont juste la pour nettoyer. Par exemple:
s/#.*//; # suppression de commentaires
s/(s)s+/$1/g; # suppression d'espaces en trop.
souvent, ca s'utilise effectivement pour des match, pour faire un parser
rudimentaire, genre:
if (m/^(.*?)=(.*)$/) {
my ($var, $value) = ($1, $2);
...
} else # autre cas de figure
...
À (at) Fri, 15 May 2009 10:45:07 +0200, Paul Gaborit nous disait (told us):
Donc lorsque tu écris :
$s = "abcde12": $s=~"L$sE";
c'est équivalent à :
$s =~ m/Labcde12E/;
Il y a donc recherche du motif Labcde12E dans $s. Le résultat de cette recherche est perdu (puisque tu ne récupères pas le résultat de l'opérateur =~). Et $s n'est pas modifié.
merci. du coup, peut-on récupérer le résultat de =~ ? j'imagine que oui, vu que le test if ($s =~ m/Labcde12E/) va donner quelque-chose...
Oui, on peut. Mais ca n'est pas systematique, ca depend beaucoup de ce que tu fais avec ta chaine. Typiquement, ca n'est pas frequent du tout avec s///: pas mal de substitutions sont juste la pour nettoyer. Par exemple:
s/#.*//; # suppression de commentaires s/(s)s+/$1/g; # suppression d'espaces en trop.
souvent, ca s'utilise effectivement pour des match, pour faire un parser rudimentaire, genre:
if (m/^(.*?)=(.*)$/) { my ($var, $value) = ($1, $2); ... } else # autre cas de figure ...