我正在学习中级perl。现在我正在研究类的对象引用。它们给了一个包
{
package Barn;
sub new { bless [], shift }
sub add { push @{ +shift }, shift }
sub contents { @{ +shift } }
sub DESTROY {
my $self = shift;
print "$self is being destroyed...\n";
for ( $self->contents ) {
print ' ', $_->name, " goes homeless.\n";
}
}
}
在这个我无法理解带加号的加号工作 运营商。他们在文中说,加号就像裸字一样 被解释为软参考:@ {“shift”}
你能清楚地解释一下使用带加号运算符的加号的工作吗?
答案 0 :(得分:15)
如果没有加号,@{shift}
与数组@shift
相同,后者根本不会调用shift
运算符。添加加号会强制shift
作为表达式进行评估,因此调用shift
运算符
我希望看到@{ shift() }
通常编写方法,以便将第一个参数提取到$self
,就像这样
sub new {
my $class = shift;
bless [ ], $class;
}
sub add {
my $self = shift;
push @$self, shift;
}
sub contents {
my $self = shift;
return @$self;
}