Humm... el asunto no es trivial...
Con
@texto2 = split " ", $texto; puedes separar el texto por los espacios en blanco, pero perderíamos a los retornos de carro. Necesitamos guardarlo.
Podemos indicar a split() que haga eso, que guarde los delimitadores que encuentre. Algo como
split /(\s+)/, $texto;Con los paréntesis de captura, split() guarda los espacios intermedios, como parte de la lista de elementos que devuelve.
Y luego, necesitamos quitar los campos que estén compuestos solo de espacios y/o tabuladores, dejando solo los campos que tengan palabras o avances de línea. Quedaría:
Using perl Syntax Highlighting
my $texto = "hola mundo. \n ¿cómo estás?";
my @texto = map { s/\n+/\n/; $_ } grep { ! /^[ \t]+$/ } split /(\s+)/, $texto;
say
join q[|], @texto; # sale "hola|mundo.|\n|¿cómo|estás?Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Con split(), partimos el $texto, por los espacios en blanco. El resultado son palabras y los espacios que los separan. Luego, con el grep(), filtramos los campos que no (!) estén compuestos exclusivamente de espacios en blanco y/o tabuladores, con lo que nos quedamos con los campos de las palabras y los avance de línea.
Editado: añadido map() para quitar los retornos de carro repetidos.