Perl:如何在样板模块中注入UTF-8 pragma?

时间:2015-09-23 16:39:42

标签: perl utf-8 perl-module

我有一个类似于common::senseModern::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注入调用代码?

3 个答案:

答案 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?我自己没有使用该模块,而是将相应的技巧复制到我的样板模块中。