我有一个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
是空白的。我在做什么错误?
答案 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;
}