Многие perl скриптеры порой впадают в ступор от
Wide character in subroutine entry.
Хорошо, если знают хотя бы примерно о том, что такое
Wide character, хуже , если нет.
Хорошо, если начинают копать матчасть и разбираются с в общем-то нехитрой работой с юникодом в perl, хуже, если начинают наобум тыкать в
use utf8,
encode/decode... На выходе порой может получиться забавная инструкция с кучей вызовов на всякий случай.. она может даже будет работать, но подобный модуль будет доставлять всем вокруг головную боль.
Итак, все просто:
1. если имеешь дело с данными из внешнего источника - проверяй их перед употреблением на
is_utf8 и дальше действуй по обстоятельствам: либо кодируй, либо декодируй - но осознанно.
2. если имеешь дело со строковыми константами , то достаточно сказать
use utf8 , чтобы для интерпретатора все константы скрипта были помечены не как последовательность байт, а именно как юникод-строка.
3. чтобы перевести в последовательность байт из юникода - decode
4. чтобы перевести из последовательности байт в юникод - encode
помните о том, кто будет вас дергать и описывайте свои входы и выходы а также свою политику относительно внутренней работы со строками ( работаете как с последовательностю байт или как со юникод-строками ) и все будет хорошо.