我知道标题听起来很有趣,但我在某个地方找到了这个片段:
my MyPackage $p1 = MyPackage->new;
包的名称在$p1
前面的作用是什么角色?
编辑:我正在运行perl 5.10.1
。
答案 0 :(得分: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 ...
答案 1 :(得分:6)
来自http://perldoc.perl.org/functions/my.html:
我的TYPE EXPR:ATTRS
我声明列出的变量是封闭的块,文件或eval的本地(词法)。如果列出了多个值,则列表必须放在括号中。
TYPE和ATTRS的确切语义和接口仍在不断发展。 TYPE当前绑定使用字段pragma,属性使用属性pragma处理,或者从Perl 5.8.0开始也通过Attribute :: Handlers模块处理。
答案 2 :(得分:0)
除了按字段使用外,词汇类型还包含实验types pragma(可从CPAN获得)。