为什么参数变量为空?
问题描述:
我有一个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
是空白。我在做什么错误?
答
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 = @_;
# ...
}
或使用您使用的任何异常捕获机制。
+0
感谢它的工作。 – harshit 2011-03-02 23:26:43
答
尝试:
sub func2 {
my ($self, $param) = @_;
warn $param;
}
或
sub func2 {
my $self = shift @_;
my $param = shift @_;
warn $param;
}
提供更多的信息更新。 – 2011-03-02 23:38:35