Perl: Как я могу ввести прагму UTF-8 в шаблонный модуль?

У меня есть шаблонный модуль Perl, похожий на common:: sense или Modern:: Perl. Это примерно отрыв от Modern::Perl. Это выглядит так (сокращенно, чтобы этот вопрос был кратким):

package Prologue;

use strict;
use feature  ();
use utf8;

sub import {
    strict  ->import;
    feature ->import( ':5.20', 'signatures' );
    utf8    ->import;
}
1;

В целом все это прекрасно работает. За исключением прагмы UTF-8. Добавление вручную use utf8; в коде вызова имеет желаемый эффект.

Так как же мне вставить прагму UTF-8 в вызывающий код?

3 ответа

Решение

Работает для меня.

$ cat Prologue.pm
package Prologue;
require utf8;
sub import { utf8->import }
1;

$ cat a.pl
$_ = "é";
CORE::say(sprintf("%vX", $_));
use Prologue;
$_ = "é";
CORE::say(sprintf("%vX", $_));

$ perl a.pl
C3.A9
E9

Это не прямой ответ, а указатель для людей, пытающихся создать свои собственные стандартные шаблоны.

Модуль Import:: Into может импортировать произвольные модули в другие пакеты. В нем очень хорошее объяснение того, что может пойти не так и что с этим делать: зачем использовать этот модуль? Я сам не использовал этот модуль, но скопировал соответствующие трюки в мой шаблонный модуль.

(Ответил сам Patrick Böker)

Как указывает икегами, это работает, как и ожидалось. Моя неудача была опечаткой в use заявление: use ProLogue; с большой буквы "L" вместо use Prologue;, В моей системе Windows без учета регистра это заставляет Perl молча не импортировать модуль Prologue.

Ошибка импорта без вывода сообщений в Windows теперь содержит отчет об ошибке.

Другие вопросы по тегам