带有移位运算符的(+)bareword有什么用?

b.s*_*aba 7 perl shift

我正在学习中间perl.现在我正在研究class的对象引用.在那里他们给了一个包

{
    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";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这个我无法理解带加号运算符的加号工作.在文中他们说,加号就像是赤字,它将被解释为软参考:@ {"shift"}

你能清楚地解释一下使用带加号算子的加号的工作吗?

Bor*_*din 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;
}
Run Code Online (Sandbox Code Playgroud)