2010-10-01 7 views
1

J'ai un script Perl qui remplace tout Us ou N à la fin d'une chaîne avec Ts. Ce programme est ce que je suis en train:Comment remplacer les caractères juste à la fin d'une chaîne en Perl?

use strict; 
my $v = "UUUUUCCNNCCCCNNNCUUUNNNNN"; 
printf("before: %s \n", $v); 
if($v =~ m/([UN]+)$/) 
{ 
    my $length = length($1); 
    substr($v, (length($v) - $length), $length) = "T" x $length; 
} 
printf(" after: %s \n", $v); 

Il produit cette sortie:

> ./test 
before: UUUUUCCNNCCCCNNNCUUUNNNNN 
after: UUUUUCCNNCCCCNNNCTTTTTTTT 

Est-il possible de le faire avec une seule expression régulière, la traduction, ou une autre commande?

Répondre

8
 

    $v =~ s/([UN]+)$/'T' x length($1)/e; 

Le modificateur /e indique à Perl pour traiter la clause de remplacement 'T' x length($1) comme une expression à évaluer, et d'utiliser le résultat de l'évaluation que la chaîne de remplacement.

+0

impressionnant, cela fonctionne. Merci! –

4

Par souci de TIMTOWTDI:

$v =~ s/[UN](?=[UN]*$)/T/g;