为什么参数变量为空?

har*_*hit 0 perl

我有一个Perl控制器类,我在其中:

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

型号类:

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

sub func2 {
    my ($self, $param) = shift(@_);
    warn $param;
}
Run Code Online (Sandbox Code Playgroud)

$param是空白的.我在做什么错?

Sda*_*ons 6

shift只移动第一个值@_. perldoc -f shift会告诉你更多有关班次如何运作的信息.

你要:

my( $self, $param ) = @_;
Run Code Online (Sandbox Code Playgroud)

你把它弄好了new().不确定发生了什么;)

实际上,仅供参考,你new()会发出警告:

Odd number of elements in hash assignment
Run Code Online (Sandbox Code Playgroud)

如果你称之为$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 = @_;
    # ...
}
Run Code Online (Sandbox Code Playgroud)

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