我有一个类似于common::sense或Modern::Perl的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 pragma注入调用代码?
答案 0 :(得分: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
答案 1 :(得分:0)
(由patszim自行回答)
As pointed out by ikegami这确实按预期工作。我的失败是use
陈述中的一个错字:use ProLogue;
有一个大写" L"而不是use Prologue;
。在我不区分大小写的Windows系统上,这会导致Perl无声地导入Prologue模块。
Windows上的静默导入失败现在有bug report。
答案 2 :(得分:0)
这不是一个直接的答案,而是人们试图创建自己的样板模块的指针。
Import::Into模块可以将任意模块导入其他包。它有一个非常好的解释,可能出现什么问题以及该怎么办:Why to use this module?我自己没有使用该模块,而是将相应的技巧复制到我的样板模块中。