为什么参数变量为空?

时间:2011-03-02 23:22:57

标签: perl

我有一个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 个答案:

答案 0 :(得分:6)

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

或使用您使用的任何异常捕获机制。

答案 1 :(得分:2)

尝试:

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

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