2010-07-02 12 views
1

J'applique le codage UTF-8 à STDIN et STDOUT. Cependant, comment m'assurer que j'applique le codage UTF-8 au fichier que je passe à mon code ci-dessous (<> va lire un fichier au lieu de STDIN si un fichier texte est passé sur la ligne de commande) en aussi peu de lignes possible.Encodage UTF-8 sur un handle de fichier en Perl

use open qw(:std :utf8) 

while (<>) { 
    print; 
} 
+1

double possible de [Comment lire UTF-8 avec l'opérateur diamant (<>)?] (Http://stackoverflow.com/questions/519309/how-do-i-read-utf-8-with-diamond-operator) – Ether

Répondre

1

Selon la documentation de open pragma, vous avez déjà le comportement que vous voulez:

Le open pragma sert une des interfaces à déclarer par défaut « couches » (également connu sous le nom " disciplines ") pour toutes les E/S. Tout open à deux arguments, readpipe (ou qx//) et les opérateurs similaires trouvés dans la portée lexicale de ce pragma utiliseront les valeurs par défaut déclarées. Même les ouvertures à trois arguments peuvent être affectées par ce pragma lorsqu'elles ne spécifient pas les couches d'E/S dans MODE.

La documentation perlop nous dit que while (<>) { ... } est équivalent à

unshift(@ARGV, '-') unless @ARGV; 
    while ($ARGV = shift) { 
    open(ARGV, $ARGV); 
    while (<ARGV>) { 
     ... # code for each line 
    } 
    } 
+0

Ainsi, le handle de fichier est traité comme s'il provenait de STDIN. Je suis en train de lire la documentation perlop, mais elle ne l'indique pas explicitement, n'est-ce pas? – syker

+0

@syker Non, il utilise le descripteur de fichier 'ARGV' tel que cité ci-dessus. L'extrait cité de la documentation du pragma 'open' spécifie qu'il s'applique à * tout * E/S. –