将我自己的pragma添加到旧perl sw的正确方法

kob*_*ame 6 perl

我有一个非常古老的perl系统(大约8-10岁),但是一个大的(100+ pm文件).现在由于某种原因需要"重新现代化"它 - 一步一步.

我想要完成的第一件事就是在每个模块中插入我的pragma:

use MySw::PerlDefs;
Run Code Online (Sandbox Code Playgroud)

什么将包含像Modern :: Perl和/或在这个问题中的东西:如何使用现代perl和utf8默认值"使用My :: defaults"?

QST1:推荐的方式是什么?

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

    package MySw::SomePackage;
    use MySw::PerlDefs;         #my new "pragma"
    

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

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

问题:

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

Ps:我理解比在编译时出现的BEGIN,但在上面的上下文中 - 它并不比"简单使用"更好?

yst*_*sth 3

将使用包装在 BEGIN 块中是行不通的;词汇编译指示的效果不会超出块的末尾。

比较:

$ 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.
Run Code Online (Sandbox Code Playgroud)