2015-07-12 4 views
4

Документация Encode::encode говорит:Кодирует :: кодирует изменение/удаление исходной строки?

закодировать

$ октета = закодировать (КОДИРОВАНИЕ, STRING [, CHECK]) Зашифровывает скалярное значение STRING из внутренней формы языка Perl в КОДИРОВАНИЯ и возвращается последовательность октетов.

Вот тестовый скрипт:

use feature qw(say); 
use strict; 
use warnings; 
use utf8; 
use open qw(:std :utf8); 

use Encode qw(encode); 

my $str = 'æ'; 
say "str = '$str'"; 
my $str2 = encode('UTF-8', $str, Encode::FB_CROAK); 
say "str = '$str'"; 

Выход:

str = 'æ' 
str = '' 

Почему $str стирается после вызова encode? Этого можно ожидать?

+1

Кажется, что ошибка. Используйте 'encode ('UTF-8', '$ str', Encode ::: FB_CROAK)' как обходной путь. – choroba

+0

Конечно, кодировка UTF8 популярна, настолько популярна, что они назвали подпрограмму специально для нее. Вы можете позвонить без проверки: 'encode_utf8 ($ str)' – vol7ron

+3

Я думаю, что это отвечает на вопрос http://stackoverflow.com/a/29843396/198183 –

ответ

3

«Если бит Encode :: LEAVE_SRC не установлен, а CHECK установлен, то исходная строка для кодирования() или декодирования() будет перезаписана на месте. Если вам это не интересно, ИЛИ это с битовой маской. "

Цитата из документации Encode.

Смежные вопросы