我知道標題聽起來很可笑,但我發現這個片段的話:我的聲明會發生什麼?
my MyPackage $p1 = MyPackage->new;
不包的名稱發球的$p1
前面什麼樣的作用?
編輯:我正在運行perl 5.10.1
。
我知道標題聽起來很可笑,但我發現這個片段的話:我的聲明會發生什麼?
my MyPackage $p1 = MyPackage->new;
不包的名稱發球的$p1
前面什麼樣的作用?
編輯:我正在運行perl 5.10.1
。
從http://perldoc.perl.org/functions/my.html:
我喜歡的類型EXPR:ATTRS
我的聲明列出的變量是本地(詞彙)的封閉塊,文件或評估許可證。如果列出多個值,則列表必須放在括號內。
TYPE和ATTRS的確切語義和接口仍在不斷髮展。 TYPE目前被綁定到字段編譯指示的使用,並且使用屬性編譯指示來處理屬性,或者通過屬性::處理程序模塊從Perl 5.8.0開始。
它檢查具有相同名稱的包,並且,截至目前,被拴在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 ...
這是正確的答案。與Perl 6無關。「受限散列」替換僞散列,但現在很少見到它們。 – Schwern 2009-12-05 09:05:23
除了通過場使用,詞法類型使用的實驗types pragma(可從CPAN獲得)。
我在Perl5中這樣做。這是新的東西嗎? – Geo 2009-12-04 21:36:17
Perl6的這一方面已經在5.10中提供。它不會在5.8和更早版本中工作。 – 2009-12-04 21:38:55
語法自5.8.0版本開始可用 - 它只是在5.8中沒有做任何非常有用的操作。 5.10;) – hobbs 2009-12-05 01:40:41