6

我有一个非常旧的 perl 系统(大约 8-10 年),但是一个很大(100+ pm 文件)。现在由于某种原因需要“重新现代化”它 - 一步一步。

我想做的第一件事就是将我的编译指示插入每个模块:

use MySw::PerlDefs;

什么将包含Modern::Perl和/或这个问题中的内容:How to make "use My::defaults" with modern perl & utf8 defaults?

QST1:推荐的方式是什么?

  1. 添加use MySw::PerlDefs;所以会得到

    包 MySw::SomePackage;
    使用 MySw::PerlDefs;#我的新“语用”
    

  2. 或者在包声明之后添加包含在 BEGIN 块中的 PerlDefs?例如:

    包 MySw::SomePackage;
     BEGIN {use MySw::PerlDefs;} #my new "pragma" in the BEGIN block
    

问题:

  • 首选方法是什么?
  • 有什么区别和/或缺点?

Ps:我理解比编译时执行的BEGIN,但是在上面的上下文中-它不比“简单使用”更好吗?

4

1 回答 1

3

在 BEGIN 块中包装使用是行不通的;lexical pragma 的效果不会超出块的末尾。

比较:

$ perl -e'BEGIN{ use Modern::Perl; } $x=42; print "$x\n"'
42
$ perl -e'use Modern::Perl; $x=42; print "$x\n"'
Global symbol "$x" requires explicit package name at -e line 1.
Global symbol "$x" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.
于 2012-06-17T16:12:59.187 回答