2011-06-20 46 views
22

「使用5.014」啓用了什麼功能?Perl:「使用5.014」啓用了什麼確切的功能?

請有人複製&粘貼在這裏,因爲我無法在任何perldoc中找到它。 (也許我是盲人)。在'perldoc功能'中只有5.10的一些東西。或者指向我的某個網址。

thanx。

編輯:

請首先檢查,你怎麼回答。例如:試試這個:

use 5.008; 
$s=1; 
say "hello"; 

你會得到關於 「說」 的錯誤消息,因爲Perl 5.8不知道 「說」

後,試試這個:

use 5.014; 
$s=1; 
say "hello"; 

你會得到錯誤

Global symbol "$s" requires explicit package name 

所以, 「用5.014」 使use strictuse feature 'say'; - 默認

回答

27

除了what raj correctly said關於如果使用use 5.014與舊版Perl的錯誤消息,您會收到錯誤消息,您可以找到啓用source code of feature的功能列表。相關部分接近頂端:

my %feature_bundle = (
    "5.10" => [qw(switch say state)], 
    "5.11" => [qw(switch say state unicode_strings)], 
    "5.12" => [qw(switch say state unicode_strings)], 
    "5.13" => [qw(switch say state unicode_strings)], 
    "5.14" => [qw(switch say state unicode_strings)], 
); 

嚴格的位部分在解釋器本身的代碼中埋得更深一些。如果你看看pp_ctl.c for tag v5.11.0

/* If a version >= 5.11.0 is requested, strictures are on by default! */ 

if (PL_compcv && vcmp(sv, sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) { 
    PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS); 
} 
+0

Thanx爲指針。只有在源代碼中看不到「嚴格使用」。 – jm666

+0

優秀的答案 - 感謝找到有助於指定每個包所帶來內容的源代碼。一個問題:'strict'也是自動啓用的(截至5.12,我記得)。你知道哪裏/何時完成了嗎?(它沒有在'feature'的源代碼中列出,據我所知 – Telemachus

+0

太棒了 - 謝謝。(你真的應該被接受的答案。) – Telemachus

4

use x.x.x編譯確實打開一些功能,這是很容易測試:

#!/usr/bin/env perl 
use warnings; 
use 5.14.0; 

say "hello world!" 

運行很好;輸出「hello world!」。

#!/usr/bin/env perl 
use warnings; 
# use 5.14.0; 

say "hello world!" 

燃燒的死亡;輸出此錯誤消息:

Unquoted string "say" may clash with future reserved word at foo line 5. 
String found where operator expected at foo line 5, near "say "hello world!"" 
    (Do you need to predeclare say?) 
syntax error at foo line 5, near "say "hello world!"" 
Execution of foo aborted due to compilation errors. 

但是,我不能100%確定從5.14.0開始啓用哪些功能。我相信你會得到say,state,switch,unicode_stringsstrict

4

在新的皮爾斯(從5.10我認爲)use 5.x執行一個隱含的use feature ':5.x'通過perldeltas爲5.12 & 5.14閱讀,我看到在5.12添加了一個Unicode相關功能,但它在5.14中沒有增加新的東西。

+0

THANX指向我的「 deltas「,其中:使用版本號大於或等於5.11.0的使用VERSION語法將從詞法上啓用stricks,就像use strict會做的一樣(除了啓用功能)。THANX !!! – jm666

+0

也看到這個答案:http://stackoverflow.com/questions/6050031/why-are-use-warnings-use-strict-not-default-in-perl/6050340#6050340 –

相關問題