Perl: s/ (remplacer) et le retour de la nouvelle chaîne
En Perl, l'opérateur s/
est utilisé pour remplacer une partie de la chaîne. Maintenant s/
va modifier son paramètre (la chaîne) en place. Je tiens cependant à remplacer une partie de la chaîne avant l'impression, comme dans
print "bla: ", replace("a","b",$myvar),"\n";
Il y a replace
fonction en Perl, ou une autre façon de faire? s/
ne fonctionnera pas directement dans ce cas, et j'aimerais éviter d'utiliser un helper variable. Est-il possible de le faire en ligne?
Vous devez vous connecter pour publier un commentaire.
Non testé:
Voir perl5132delta:
En Perl 5.14 et plus tard, vous pouvez utiliser le
/r
option avec la substitution de l'opérateur pour effectuer non-destructive de substitution:Alternativement, vous pouvez utiliser un
ne()
bloc avec une temporaire variable lexicale, par exemple:do()
. Mon objectif c'est un peu brouillon, mais :-/.$myvar
ne contient pas una
. Dans ce cas,$_
serait pas défini. C'est aussi pourquoi l'or 1
a été ajouté dans cette réponse, à force de leprint
d'aller de l'avant même si il n'y a rien à remplacer. Pas très lisible de l'OMI.($_ = $myvar) =~ s/a/b/g, print "bla: ", $_, "\n"
or 1
m'a jeté. Alors, leor 1
juste contribuant de bruit sur la ligne?s///g
retourne0
, ce qui équivaut àfalse
et donc, rien n'est imprimé. Leor 1
ou|| 1
assure qu'il y aura toujours quelque chose d'imprimé (la chaîne d'origine avec pas de remplacement).Si vous voulez vraiment, vous pouvez faire votre propre, mais je ne le ferais pas parce que vous avez beaucoup plus de fonctionnalités avec
s///
... vous pourriez construire cette fonctionnalité dans votre fonction, mais pourquoi recréer quelque chose qui existe déjà?