2015-04-24 23 views
5

Perché il parametro encode elimina l'argomento passato, se CHECK è impostato su un valore vero?Perché la codifica elimina l'argomento?

#!/usr/bin/env perl 
use warnings; 
use strict; 
use utf8; 
use Encode; 

my $decoded = 'h'; 
if (eval { encode('utf-8', $decoded, 1); 1 }) { 
    print "|$decoded|\n"; # prints || 
} 

risposta

7

E 'per l'uso nel caso in cui si sta passando più volte blocchi di dati da encode o decode. L'idea è che la funzione rimuova la parte della stringa che ha tradotto, e basta aggiungere il chunk successivo a ciò che è rimasto. È utile per gestire le codifiche multi-byte che possono essere suddivise tra due blocchi.

Se non si desidera questo comportamento, è possibile OR il bit Encode::LEAVE_SRC nel terzo parametro. Ti piace questa uscita

use utf8; 
use strict; 
use warnings; 

use Encode qw/ encode decode FB_CROAK LEAVE_SRC /; 
use Data::Dump; 

my $decoded = 'ABC'; 
dd $decoded; 
my $encoded = encode('UTF-8', $decoded, FB_CROAK | LEAVE_SRC); 
dd $decoded; 
dd $encoded; 

"ABC" 
"ABC" 
"ABC" 
Problemi correlati