2009-12-04 111 views
5

我知道標題聽起來很可笑,但我發現這個片段的話:我的聲明會發生什麼?

my MyPackage $p1 = MyPackage->new; 

不包的名稱發球的$p1前面什麼樣的作用?

編輯:我正在運行perl 5.10.1

回答

6

http://perldoc.perl.org/functions/my.html

我喜歡的類型EXPR:ATTRS

我的聲明列出的變量是本地(詞彙)的封閉塊,文件或評估許可證。如果列出多個值,則列表必須放在括號內。

TYPE和ATTRS的確切語義和接口仍在不斷髮展。 TYPE目前被綁定到字段編譯指示的使用,並且使用屬性編譯指示來處理屬性,或者通過屬性::處理程序模塊從Perl 5.8.0開始。

+0

我在Perl5中這樣做。這是新的東西嗎? – Geo 2009-12-04 21:36:17

+0

Perl6的這一方面已經在5.10中提供。它不會在5.8和更早版本中工作。 – 2009-12-04 21:38:55

+2

語法自5.8.0版本開始可用 - 它只是在5.8中沒有做任何非常有用的操作。 5.10;) – hobbs 2009-12-05 01:40:41

11

它檢查具有相同名稱的包,並且,截至目前,被拴在fields編譯,這有助於您在字段名稱的拼寫錯誤。

例如:

package MyPackage; 
use fields qw/ foo bar /; 
sub new { fields::new(shift) } 

然後,如果你嘗試運行

use MyPackage; 
my MyPackage $p1 = MyPackage->new; 
print $p1->{notpresent}, "\n"; 

No such class field "notpresent" in variable $p1 of type MyPackage at ... 
+0

這是正確的答案。與Perl 6無關。「受限散列」替換僞散列,但現在很少見到它們。 – Schwern 2009-12-05 09:05:23

0

除了通過場使用,詞法類型使用的實驗types pragma(可從CPAN獲得)。

相關問題