実用的なモジュールには、動的ではなくレキシカルなスコープがあります。
バージョン プラグマは、バージョンに応じて、現在のスコープ内の特定の機能を有効にします。これらの機能をグローバルにアクティブ化することはありません。これは下位互換性にとって重要です。
これは、プラグマをモジュール定義の外側でアクティブ化できることを意味しますが、スコープ内では次のようになります。
# 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
それらを行うことです;-)