5

I am not sure if and what difference it makes if a start a perl module with

package MYPACKAGE;
use 5.12.0;
use warnings;

# functions are here

1;

or

use 5.12.0;
use warnings;
package MYPACKAGE;

#  functions are here

1;

or if these use ... are not regarded at all because the use ... are inherited from the calling perl script.

The question probably boils down to: is it worthwile to specify those use ... in a module or is it sufficient if I have them specified in my perl script.

4

1 回答 1

7

语用模块具有词法范围,而不是动态范围。

版本编译指示激活当前范围内的某些功能,具体取决于版本。它不会全局激活这些功能。这对于向后兼容很重要。

这意味着可以在模块定义之外激活编译指示,但在我们的范围内:

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

这与导入当前包(!= 范围)的正常导入不同。

warningspragma 激活当前范围内的警告。

但是,每个文件都应该包含use strict, 因为词法范围永远不会跨文件延伸。Pragma 是不及物的:

下午:

say "Hi";
1;

主要.pl:

use 5.012;
require Foo;

失败。


因此,您将这些 pragma 放在哪里在很大程度上是无关紧要的。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 回答