2013-04-13 32 views
5

我不知道,如果一开始一个Perl模块我应该使用“使用5.12.0;使用警告;”在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脚本中指定了它们,它是否足够。

回答

7

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

版本附注根据版本激活当前范围中的某些功能。它不会在全球激活这些功能。这对于向后兼容很重要。

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

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

这是从被导入到当前包正常进口不同(=范围!)。

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

但是,每个文件都应包含use strict,因为词汇范围永远不会跨文件延伸。编译指示不可传递:

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

+0

这是可能的一个模块来使用['strict'](http://perldoc.perl.org/strict.html “perldoc strict”)和['warnings'](http://perldoc.perl.org/warnings.html“perldoc警告”)。 'package example;严格使用; sub import {strict-> import}'示例:[Modern :: Perl](http://p3rl.org/Modern::Perl“perldoc Modern :: Perl”) –