Bienvenido a los foros de Perl en Español, pafnuty.
Una pregunta antes... ¿por qué quieres hacer eso?
Actualización: sospecho que lo que quieres es cambiar los caracteres acentuados por entidades HTML.
Aquí hay una manera:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
#use utf8;
use encoding 'utf8';
use open ':utf8';
my %a = (
'á' => 'á',
'é' => 'é',
'í' => 'í',
'ó' => 'ó',
'ú' => 'ú',
);
#$^I = '.bak';
while(<>){
s/([áéíóú])/$a{$1}/eg;
print ;
}
__END__
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En vez de usar "use utf8;", ponemos "use encoding 'utf8';" que es casi lo mismo, y porque "use utf8;" no es necesario desde el Perl 5.8.0 (aunque sí que es cierto que hay algunas diferencias entre las dos opciones).
Luego, con el "use open" indicamos que tanto la entrada como la salida la queremos también hacer en codificación utf8 (estamos suponiendo que la entrada está en esa codificación, que vamos a modificar algunas entidades, pero que el resto lo dejaremos tal cual estaba).
El resto del programa es igual al que tenías.
De todas maneras, si lo que estás haciendo es tratar de filtrar una página HTML que contiene caracteres codificados en utf8, te vale con incluir una cabecera del tipo
Using html4strict Syntax Highlighting
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
en el
head de la página, de la misma manera que esta misma página HTML que estás viendo (mira su código).
Así no tendrás que hacer conversión ninguna.