我知道标题听起来很有趣,但我发现这个片段在某个地方:
my MyPackage $p1 = MyPackage->new;
Run Code Online (Sandbox Code Playgroud)
包裹的名称在面前扮演什么角色$p1?
编辑:我正在运行perl 5.10.1.
Gre*_*con 11
它检查具有相同名称的包,并且截至目前,它与fieldspragma 绑定,这有助于检查字段名称中的拼写错误.
例如:
package MyPackage;
use fields qw/ foo bar /;
sub new { fields::new(shift) }
Run Code Online (Sandbox Code Playgroud)
然后,如果你试图运行
use MyPackage;
my MyPackage $p1 = MyPackage->new;
print $p1->{notpresent}, "\n";
Run Code Online (Sandbox Code Playgroud)
你得到
No such class field "notpresent" in variable $p1 of type MyPackage at ...
Run Code Online (Sandbox Code Playgroud)
来自http://perldoc.perl.org/functions/my.html:
我的TYPE EXPR:ATTRS
我声明列出的变量是封闭的块,文件或eval的本地(词法).如果列出了多个值,则列表必须放在括号中.
TYPE和ATTRS的确切语义和接口仍在不断发展.TYPE当前绑定使用字段pragma,属性使用属性pragma处理,或者从Perl 5.8.0开始也通过Attribute :: Handlers模块处理.