2009-12-10 53 views
16

的時候纔來說什麼版本的Perl,我們需要爲我們的腳本,我們已經有了選擇,哦,兄弟,我們已經有了選擇:聲明要使用哪個版本的Perl的現代方式是什麼?

use 5.010; 
use 5.010_001; 
use 5.10.0; 
use v5.10; 
use v5.10.0; 

所有似乎工作。 perlcritic抱怨所有,但前兩個。 (不幸的是,v字符串似乎有這樣的缺陷,因爲Perl 6期望您爲您的Perl 6腳本執行use v6; ...)

因此,我們應該怎麼做才能表明我們想要使用特定版本的Perl?

+0

另請參閱http://stackoverflow.com/questions/1216113/how-do-you-specify-a-package-version-in-perl – Ether 2009-12-29 01:04:05

+0

相關但絕對是我們需要的「重複」類型,作爲他們以完全不同的方式被問到。 – 2009-12-29 07:57:41

回答

7

實際上只有兩種選擇:十進制數字和v-字符串。要使用哪種形式,部分取決於您希望使用有意義的錯誤消息「支持」哪些版本的Perl,而不是語法錯誤。 (v-string語法是在Perl 5.6中添加的。)接受的最佳實踐 - 這是perlcritic強制執行的 - 使用十進制符號。您應該指定您的腳本正常運行所需的Perl的最低版本。通常這意味着聲明對主要版本中添加的語言功能的依賴性,例如使用5.10中添加的say函數。如果您的腳本正確行爲很重要,那麼您應該包含修補程序級別。例如,我的一些代碼指定use 5.008001,因爲它取決於修復了5.8.0中5.8.1版已修復的bug。

5

「現代」的方式是使用從v開始的格式。但是,這可能不一定是你真正想要做的。

批評者抱怨,因爲舊版本的Perl不會理解,並且以v開頭的表單很好地播放。但是,如果你的Perl版本支持,v是更好的閱讀,因爲你可以說:

use v5.10.1; 

...不是...

use 5.010_001; 

所以,在文檔中的use,以下解決方法是提供:

use 5.006; use v5.6.1; 

注:我認爲documenation是錯誤的,在這裏,因爲在perldoc use的示例中省略了v

由於不支持v語法的Perl版本在第一個use時會失敗,所以它們不會到達第二個更具體和可讀的語法。

+3

當指定3個或更多部分時,v是可選的 – ysth 2009-12-10 05:27:20

+0

@ysth:當然,但是導入段使用'v'字符串,然後在示例中刪除'v'而不提及它們是可選的。它是有效的代碼,但與引入不匹配。 – 2009-12-10 13:10:11

7

我只是用5.010_001之類的東西。我已經厭倦了處理版本字符串問題,因爲這些問題應該讓人頭腦簡單。

因爲我主要處理構建系統,所以我持續努力Module::Build的內部version.pm,它與CPAN上的version.pm不同步。我認爲現在最好的是,但我有更好的想法。

最好的做法應該始終是做那些對你的關注最少的東西,當然不會比它給予的價值更多的關注。在我看來,V字符串和點分數是一個巨大的分心,沒有額外的好處,浪費了大量有價值的程序員時間,只是爲了回到起點。

我還應該注意Perl :: Critic經常推出可疑的做法,以達到減少人們做事情的更高目的。但是,這些做法往往會導致問題,使他們不盡人意。這是其中的一種情況。更現實的最佳做法是不要使Perl :: Critic符合您的目標。在有用的地方使用它,但在這種情況下,不要浪費精神時間。

+0

偉大的洞察力,謝謝。 – 2009-12-11 00:52:54

相關問題