Почему переменная параметра пуста? - PullRequest
0 голосов
/ 03 марта 2011

У меня есть класс контроллера Perl, в котором я делаю:

sub func1 {
    my $f1    = Model::myModel->new();
    my $param = "test";
    $f1->func2($param);
}

Класс модели:

sub new {
    my ($class, %arg) = @_;
    my $self = bless {}, $class;
    return $self;
}

sub func2 {
    my ($self, $param) = shift(@_);
    warn $param;
}

$param пусто.Какую ошибку я делаю?

Ответы [ 2 ]

6 голосов
/ 03 марта 2011

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 = @_;
    # ...
}

Или используя любой используемый вами механизм перехвата исключений.

2 голосов
/ 03 марта 2011

Попробуйте:

sub func2 {
  my ( $self, $param ) = @_;
  warn $param;
}

или

sub func2 {
  my $self  = shift @_;
  my $param = shift @_;
  warn $param;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...