El 'use open "locale" me resolvió lo del
wide character, porque yo trabajo en mis máquinas con utf8, desde hace años.
El say() se activa con el 'feature', desde luego, pero solo si tienes el Perl v5.10. El mensaje de error dice que tienes un Perl v5.8.8, de hace ya unos años... ¡lástima!
El problema de la función está en el return().
Fíjate que lo has puesto dentro de un bucle while(). Eso quiere decir que en cuanto el while() encuentre la primera concordancia de la expresión regular, saldrá de la función. Por eso obtienes la línea de "abyecto", pero no las restantes: el bucle while() salió por el return() y no siguió buscando más concordancias.
Puedes hacer lo siguiente: crea una variable local, dentro de la función, que vaya almacenando lo que la expresión regular va encontrando, para luego devolverlo todo:
Using perl Syntax Highlighting
my $resultado;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Using perl Syntax Highlighting
$resultado .= "$desc\n";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Using perl Syntax Highlighting
return $resultado;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4