Bonjour,
J'ai un truc du genre :
car $expr est en fait passé au script en paramètre, or ça ne fonctionne pas...Code:
1
2 $expr = "s/\s/_/g"; $chaine =~ $expr;
si quelqu'un a une idée merci d'avance :)
Version imprimable
Bonjour,
J'ai un truc du genre :
car $expr est en fait passé au script en paramètre, or ça ne fonctionne pas...Code:
1
2 $expr = "s/\s/_/g"; $chaine =~ $expr;
si quelqu'un a une idée merci d'avance :)
d'abord, salut,Citation:
Envoyé par arkem
puis le code sous balise code, c'est mieux pour la lisibilité.
de plus, on sait pas ce que tu veux faire, soit explicite etça ne veut rien dire.Code:$chaine =~ $expr;
Regarde ca :
Je crois que tu dois utiliser la fonction eval(). Regarde la doc.Code:
1
2
3
4
5
6
7
8
9
10 #!/usr/bin/perl -w $ligne = "acacacaaaccabaaa"; $e = "/ab+/"; $total = "if ($ligne"." =~ "."$e) { print 'Le motif est trouve.'; } else { print \"Le motif n'est pas trouve.\"; }"; eval($total);
J'espere que cela va t'aider.
A+
Oui excusez moi pour le manque d'informations.
But : écrire un script pour renommer des fichiers vie des expressions régulières, avec l'expression régulière passée comme paramètre au script.
Donc à un moment j'applique mon expression régulière :
(pour faire en fait : $chaine =~ s/\s/_/g"; )Code:
1
2 $parametre = "s/\s/_/g"; $chaine =~ $parametre;
Or mon expression n'est pas appliquée.
J'ai aussi essayé :
mais rien n'y change... :?Code:eval { $chaine =~ $parametre; }
une idée ?
il ne me semble pas judicieux de mettre ton expression régulière dans une variable pour ensuite faire
.Code:$chaine =~ $parametre
je me trompe peut-être, mais je ne pense pas que Perl puisse comprendre ton expression
je ferai plutôt quelque chose du style
je n'ai pas testé, mais ça me semble plus judicieux ..Code:
1
2
3
4 $titi = "\s"; $tata = "_"; $chaine =~ s/$titi/$tata/g;
je suis du même avis que stoyak. Et je rajoute qu'il est obligatoire de mettre ton code entre balise code pour une meilleur lisibilité. La prochaine fois, ton thread sera verouillé.
Reedite ton message et met ton code entre balise.
Consulte les régles du forum (dans ma signature),
Merci!!
merci pour vos réponses.
oui effectivement c'est mieux de mettre l'expression régulière dans une variable
par contre le code ci-dessous ne fonctionne pas :
je suppose qu'il y a des problèmes avec les / et les \Code:
1
2
3 $titi = "\s"; $tata = "_"; $chaine =~ "s/$titi/$tata/g";
Et les " ;)Citation:
Envoyé par arkem
Le mieux, c'est de faire :Les ' ne permettent pas à Perl d'interpréter le \s à l'intérieur de $titi. Cette chaine n'étant pas interprétée, elle peut servir telle quelle pour l'expression rationnelle.Code:
1
2
3 $titi = '\s'; $tata = '_'; $chaine =~ s/$titi/$tata/g;
Sinon, il ne faut pas mettre de " autour de l'expression rationnelle utilisée avec l'opérateur =~.
Bon Perl
merci pour ta réponse :)
mais si je passe $titi et $tata en paramètre au script il seront considérés comme des chaines et donc le pb se repose non ?
fais un script test et essaye :wink:
Oui et non ...Citation:
Envoyé par arkem
Oui il seront considérés comme des chaines.
Non le problème ne devrait pas se poser.
Lorsqu'une chaine est lue (paramètres, E/S fichiers, etc), les caractères "escapés" par un \ ne sont pas interprétés. Les chaines lues contiennent bien le \ et le caractère qui suit.
Il en est de même lorsque la chaine est constante, dans le script, et placée entre ' (simples quotes).
Par contre, lorsque la chaine est constante, dans le script, et placée entre " (doubles quotes), alors l'interpréteur Perl fait un peu de boulot et remplace la paire (\, caractère qui suit) par un caractère unique, le plus souvent un caractère de contrôle, comme le \n qui introduit un saut de ligne.
Bon Perl.
merci pour toutes ces infos, je teste entre midi et 2 :P