5

perlモジュールを

package MYPACKAGE;
use 5.12.0;
use warnings;

# functions are here

1;

また

use 5.12.0;
use warnings;
package MYPACKAGE;

#  functions are here

1;

または、呼び出し元の perl スクリプトから継承されているため、これらuse ...がまったく考慮されない場合。use ...

質問はおそらく次のように要約されます:use ...モジュールでそれらを指定する価値があるのか​​、それとも自分の perl スクリプトでそれらを指定すれば十分なのか。

4

1 に答える 1

7

実用的なモジュールには、動的ではなくレキシカルなスコープがあります。

バージョン プラグマは、バージョンに応じて、現在のスコープ内の特定の機能を有効にします。これらの機能をグローバルにアクティブ化することはありません。これは下位互換性にとって重要です。

これは、プラグマをモジュール定義の外側でアクティブ化できることを意味しますが、スコープ内では次のようになります。

# this is package main
use 5.012; # activates `say`
package Foo;
say "Hi"; # works, because lexical scope

これは、現在のパッケージ (!= スコープ) にインポートされる通常のインポートとは異なります。

プラグマはwarnings、現在のスコープ内で警告を有効にします。

ただし、use strictレキシカルスコープがファイル全体に広がることはないため、すべてのファイルに が含まれている必要があります。プラグマは推移的ではありません:

ふー.pm:

say "Hi";
1;

main.pl:

use 5.012;
require Foo;

失敗します。


したがって、これらのプラグマを正確にどこに置くかは、ほとんど無関係です。packageファイルに複数の名前空間がある場合は、プラグマを の前に置くことをお勧めします。

use 5.012; use warnings;

package Foo;
...;
package Bar;
...;
1;

ただしpackage、ファイル内の唯一のものである場合は最初に配置します。

package Foo;
use 5.012; use warnings;
...;
1;

唯一重要なことは、あなたがuseそれらを行うことです;-)

于 2013-04-13T12:29:57.957 に答える