shift
только сдвигает первое значение из @_
.perldoc -f shift
расскажет вам больше о том, как работает сдвиг.
Вы хотите:
my( $self, $param ) = @_;
Вы правильно поняли new()
.Не уверен, что случилось;)
На самом деле, к вашему сведению, ваш new()
выдаст предупреждение:
Odd number of elements in hash assignment
Если вы назовете это как $package->new( 'a' );
Возможно, вы захотите поймать в ловушкучто-то вроде:
use Carp qw( croak confess );
sub new {
my $class = shift;
confess "$class requires an even number of args" if( @_ & 1 );
my %args = @_;
# ...
}
Или используя любой используемый вами механизм перехвата исключений.