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 теперь содержит отчет об ошибке.