6

私は本当に古い perl システム (約 8 ~ 10 年前) を手に入れましたが、大きなもの (100 以上の pm ファイル) です。何らかの理由で、それを「再近代化」する必要があります-段階的に。

私が最初にやりたいことの1つは、すべてのモジュールに私のプラグマを挿入することです:

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;} #BEGIN ブロックの新しい「プラグマ」
    

質問:

  • 好ましい方法は何ですか?
  • 違いや欠点は何ですか?

Ps: コンパイル時に実行される BEGIN よりも理解していますが、上記のコンテキストでは、「単純な使用」よりも優れているわけではありませんか?

4

1 に答える 1

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.
于 2012-06-17T16:12:59.187 に答える