2013-04-13 63 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」) –