Comment puis-je lire en UTF-8 avec le diamant de l'opérateur (<>)?

Je veux lire UTF-8 entrée en Perl, peu importe si il s'agit de l'entrée standard ou à partir d'un fichier, à l'aide de l'opérateur diamant: while(<>){...}.

Donc mon script doit être appelée dans ces deux voies, comme d'habitude, en donnant le même résultat:

./script.pl utf8.txt
cat utf8.txt | ./script.pl

Mais les sorties diffèrent! Seulement le deuxième appel (à l'aide de cat) semble fonctionner comme prévu, la lecture correctement l'UTF-8. Voici le script:

#!/usr/bin/perl -w

binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';

while(<>){
    my @chars = split //, $_;
    print "$_\n" foreach(@chars);
}

Comment puis-je faire lire UTF-8 correctement dans les deux cas? Je voudrais continuer à utiliser le diamant de l'opérateur <> pour la lecture, si possible.

EDIT:

J'ai réalisé que je devrais probablement décrire les différentes sorties. Mon fichier d'entrée contient cette séquence: a\xCA\xA7b. La méthode avec cat correctement les résultats:

a
\xCA\xA7
b

Mais l'autre méthode me donne ceci:

a
\xC3\x8A
\xC2\xA7
b
InformationsquelleAutor Frank | 2009-02-06