如果启动一个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脚本.
问题可能归结为:是否值得在模块中指定那些使用…或者如果我在perl脚本中指定它们就足够了.
解决方法
实用模块具有词汇,而非动态范围.
版本pragma会激活当前作用域中的某些功能,具体取决于版本.它不会全局激活这些功能.这对于向后兼容性很重要.
这意味着可以在模块定义之外激活pragma,但在我们的范围内:
# this is package main use 5.012; # activates `say` package Foo; say "Hi"; # works,because lexical scope
这与导入当前包(!=范围)的普通导入不同.
警告pragma激活当前范围内的警告.
但是,每个文件都应包含use strict,因为词法范围从不延伸到文件.语用库不是传递性的:
Foo.pm:
say "Hi"; 1;
main.pl:
use 5.012; require Foo;
失败.
因此,你确切地说这些pragma在很大程度上是无关紧要的.我建议在文件中有多个名称空间时将pragma放在包之前,例如
use 5.012; use warnings; package Foo; ...; package Bar; ...; 1;
但如果它是文件中唯一的一个,则首先放入包.
package Foo; use 5.012; use warnings; ...; 1;
唯一重要的是你确实使用它们;-)