Ésta es la respuesta de perlfaq4 de la última versión estable:
¿Cómo se quita pares consecutivos de personajes?
(aportado por Brian D Foy)
Usted puede utilizar el operador de sustitución para encontrar los pares de caracteres (o series de caracteres) y reemplazarlos con una sola instancia. En esta sustitución, encontramos un personaje en (.). Los paréntesis de memoria almacenan el carácter coincidente en la referencia-atrás \ 1 y lo usamos para requerir que lo siga inmediatamente. Reemplazamos esa parte de la cadena con el personaje en $ 1.
s/(.)\1/$1/g;
También podemos utilizar el operador de transliteración, tr ///. En este ejemplo, el lado de la lista de búsqueda de nuestro tr /// no contiene nada, pero la opción c complementa eso para que contenga todo. La lista de reemplazo tampoco contiene nada, por lo que la transliteración es casi nula ya que no hará ningún reemplazo (o más exactamente, reemplazará al personaje consigo mismo). Sin embargo, las calabazas opción s duplicados y caracteres consecutivos en la cadena para un personaje no aparece junto a sí
my $str = 'Haarlem'; # in the Netherlands
$str =~ tr///cs; # Now Harlem, like in New York
Cuando hizo eso 'G '(en' \ g1') de deslizamiento ahí? No está en el POD para 5.12.1 pero puedo verlo en github. ¿Es una cosa futura (5.13+)? –
La construcción '\ g' se introdujo en' 5.10.0'. De 'perl5100delta': * Una nueva sintaxis' \ g {N} 'o' \ gN' donde "N" es un entero decimal permite una forma más segura de la notación de retrospección, así como también permite referencias retrospectivas relativas. * –
No hay necesita, más allá de * OBLIGATORIO * 5.10, usar eso sobre \ 1 en esta respuesta. – MkV