Документация 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
? Этого можно ожидать?
Кажется, что ошибка. Используйте 'encode ('UTF-8', '$ str', Encode ::: FB_CROAK)' как обходной путь. – choroba
Конечно, кодировка UTF8 популярна, настолько популярна, что они назвали подпрограмму специально для нее. Вы можете позвонить без проверки: 'encode_utf8 ($ str)' – vol7ron
Я думаю, что это отвечает на вопрос http://stackoverflow.com/a/29843396/198183 –