すいません。以下のプログラムで@{+shift}のように、
なぜ、shiftに+記号をつけられるの分かりません。
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";
}
}
}