my $self; { my %hash; $self = bless(\%hash, $pkg); }引用自HTML/Template.pm,为什么不简单地使用bless $self,$pkg
发布于 2011-07-12 15:38:45
我认为这样做的目的是将%hash的范围限制在封闭的块中。这可以重写为:
my $self = bless {}, $pkg;发布于 2011-07-12 16:01:37
$hash = {};
^^^^^ ^^
referrer referent在以下语句中:
$self = bless( $hash, $pkg );bless将$hash引用的对象(匿名散列)标记为$pkg ( HTML::Template类)的对象。它不会更改$hash变量。
bless函数返回对受祝福的匿名散列的引用。因此,$self变成了对受祝福的匿名散列( referent)的引用。
重要的是要记住,如果bless函数的第一个参数是一个引用,那么它所引用的就是有福的东西,而不是变量本身:
$self = bless( $self, $pkg );$self不是指任何东西--它就是undef。没有什么可以祝福的东西。它等同于尝试这样做:
$self = bless( undef, $pkg );Bless My Referents为这个主题提供了一个很好的介绍。
发布于 2011-07-12 15:01:08
因为$self是undef -几乎等同于:
my $self ={}; { $self = bless($self, $pkg); }或者:
$self = bless( {}, $pkg);编辑回复评论的:
你不能使用undef,因为你会得到错误Can't bless non-reference value at ...。这是因为只有硬引用才可能是有福的。这就是Perl强制对象封装的方式。请参阅perlobj manpage。
https://stackoverflow.com/questions/6660528
复制相似问题