我的宣言会发生什么?

时间:2009-12-04 21:32:56

标签: perl oop

我知道标题听起来很有趣,但我在某个地方找到了这个片段:

my MyPackage $p1 = MyPackage->new;

包的名称在$p1前面的作用是什么角色?

编辑:我正在运行perl 5.10.1

3 个答案:

答案 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获得)。