Replace sans modification de la chaine

Replace sans modification de la chaine - Perl - Programmation

Marsh Posté le 23-05-2007 à 17:33:18    

Petite question alakon et qui n'a d'intérêt que ma culture personnelle:
Est-il possible en perl de faire un replace dans une chaine de caractères sans modifier la-dite chaine?
 
Exemple: j'ai deux variables ($a='toto', $b='tata' ) et je veux mettre dans un troisieme variable ($c) la concatenation de $a et du remplacement de tous les 't' de $b en 'p', tout ça s'en modifier $b et en une seule ligne.
 
J'ai bien trouvé une façon, mais je trouve ça un goret:

Code :
  1. my $a='toto';
  2. my $b='tata';
  3. my $c = $a.(($_=$b)=~s/t/p/g?$_:$_);


et ce qui revient de toute façon à créer une recopie de b.
 
Y'a-t-il un moyen "plus propre"...

Reply

Marsh Posté le 23-05-2007 à 17:33:18   

Reply

Marsh Posté le 24-05-2007 à 09:33:30    

Code :
  1. my $a='toto';
  2. my $b='tata';
  3. my $c = $b;
  4. $c =~ s/t/p/g;
  5. $c = "$a$c";


 
Et en une ligne :
 

Code :
  1. $c =~ s/t/p/g; $c = "$a$c";


 
 :D

Reply

Marsh Posté le 24-05-2007 à 09:47:47    

oui mais nan c'est triché ;)

Reply

Marsh Posté le 24-05-2007 à 09:52:56    

anapajari a écrit :

oui mais nan c'est triché ;)


 
et vu que tricher n'est pas jouer, alors je ne joue plus  :D  
 
heu, sinon, intérêt de faire un truc sacom en une seule ligne ?  :heink:

Reply

Marsh Posté le 24-05-2007 à 09:58:42    

absolument aucun, je le dis au debut de mon post :o
 
Mais je reste quand même surpris qu'il n'y ait pas en perl de fonction qui renvoie le resultat des modifications sur une chaine sans que la chaine originelle soit modifiée ( genre str_replace en php, replace en java, tr en ruby ...)

Reply

Marsh Posté le 24-05-2007 à 10:01:22    

anapajari a écrit :

absolument aucun, je le dis au debut de mon post :o
 
Mais je reste quand même surpris qu'il n'y ait pas en perl de fonction qui renvoie le resultat des modifications sur une chaine sans que la chaine originelle soit modifiée ( genre str_replace en php, replace en java, tr en ruby ...)


Ceci dit, tu peux toujours faire ta propre fonction pour faire le taf.
 
Et ce sera toujours en une seule ligne, heu, si tu comptes pas les lignes de ta fonction  :D

Reply

Sujets relatifs:

Leave a Replay

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