Ваша последовательность байтов: 0xc0 0xe2 0xf2 0xee 0xf0.Это русское слово «автор» в cp1251.Представление, данное вами, можно получить, если ваше приложение предполагает, что это кодировка cp1252.Теперь вопрос в том, какую кодовую страницу вы хотели бы иметь?Или какая кодовая страница нужна вашему приложению?
Чтобы правильно прочитать файл в cp1251, вы должны использовать конструкцию, подобную этой:
open (my $tmp_h,"<:encoding(cp-1251)", $ARGV[0]) or die $!;
Это позволяет perl знать, какую кодовую страницу вы используете в вашем файле.И затем, когда вы будете читать файл в строку, это позволит Perl правильно преобразовать значения из cp1251 во внутреннюю форму Perl (UTF-8) и использовать эти строки как угодно без проблем.
Для внутренней формы perl set UTF8флаг, который вы можете проверить с помощью модуля Devel :: Peek.
Я думаю, что использование внутренней формы также даст вам возможность правильно использовать любую строковую операцию и поможет избежать ошибок.
Я бы порекомендовалиспользовать прагму «использовать utf8» в нашем исходном коде.Теперь все литералы в исходном коде будут обработаны как utf8 и автоматически правильно преобразованы во внутреннюю форму.Теперь мы знаем, что наш исходный код находится в UTF8 (и было бы лучше, если бы с BOM, потому что обнаружение BOM обычно является первым, что обычно делают разные IDE и редактор).Позже мы можем открыть другие файлы в любой кодировке, используя конструкцию «<: encoding (....)», получить данные из Интернета, из баз данных и снова убедиться, что данные были преобразованы во внутреннюю форму, правильно проверяя флаг utf8.Имея все это, мы сможем работать со всеми этими данными одним способом, корректно сравнивать строки, использовать регулярные выражения и так далее.</p>