如果使用
启动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脚本中指定它们就足够了。
答案 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
他们; - )