我应该使用“使用5.12.0;使用警告;”在perl模块中?

时间:2013-04-13 11:38:59

标签: perl module

如果使用

启动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;

或者这些use ...是否完全不被视为 ,因为use ...是从调用perl脚本继承的。

问题可能归结为:在模块中指定那些use ...是否值得,或者如果我在perl脚本中指定它们就足够了。

1 个答案:

答案 0 :(得分:7)

实用模块具有词汇,而非动态范围。

版本pragma根据版本激活当前作用域中的某些功能。它不会全局激活这些功能。这对于向后兼容性非常重要。

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

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

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

warnings pragma激活当前范围内的警告。

但是,每个文件都应包含use strict,因为词法范围永远不会跨越文件。语用库不是传递性的:

Foo.pm:

say "Hi";
1;

main.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他们; - )