2015-04-24 14 views
5

Warum löscht encode das übergebene Argument, wenn CHECK auf einen wahren Wert gesetzt ist?Warum löscht encode das Argument?

#!/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 || 
} 

Antwort

7

Es ist für den Einsatz in dem Fall, dass Sie immer wieder Stücke von Daten zu encode oder decode sind vorbei. Die Idee ist, dass die Funktion den Teil der Zeichenfolge entfernt, den sie übersetzt hat, und Sie müssen nur den nächsten Teil an den Rest anhängen. Es ist nützlich für die Verarbeitung von Multi-Byte-Codierungen, die über zwei Chunks aufgeteilt werden können.

Wenn Sie dieses Verhalten nicht möchten, dann können Sie ODER das Encode::LEAVE_SRC Bit in den dritten Parameter. Gefallen Sie diesen

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; 

Ausgang

"ABC" 
"ABC" 
"ABC" 
Verwandte Themen