символы vs байты
Смущает формулировка "подключение модуля" 

use utf8 действует только в пределах текущего блока (lexical scope) где
указано 'use utf8', а потом перестаёт. а модуль загружен в память остаётся
всегда (да и вообще он всегда загружен)
опечатка
Для вызова utf8::XXX не нужен ни 'use utf8', 'use utf8 ()' и 'require utf8'.

Оно само работает. Единственный модуль такое. Это есть и в wiki
и в perl документации
на всякий случай, чтобы обозначить что use bytes не влияют на присваивание скаляров
Убрал определение что у потока вывода есть кодировка, т.к. поток

вывода в данном случае бинарный, плюс символы с кодом от 128 до 255
могут в него вывестить (perl подумает что это байты, в результате будет
как будто Latin1). Wide characters здесь употребляется как раз как > 255
уточнил байт 0xD2 vs символ unicode с кодом 0xD2
После encode() странно говорить что строка будет с флагом или без. Это бинарные данные,

да они могут быть и с флагом и без, но конкретно после encode() обычно без флага.
вместо этого лучше пример когда utf8::downgrade реально сработало на совесть
Лучше тут назвать ASCII а не Latin, чтобы не путали с Latin1
пояснение про decode
более подробно тут
уточнил
не только с кодами <127, а с любыми (т.е. <=255 иначе без флага не получится)
Merge pull request #1 from vsespb/fine_tuning

Fine tuning