2011-03-02 89 views
0

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

提供更多的信息更新。 – 2011-03-02 23:38:35

回答

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

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

+0

感谢它的工作。 – harshit 2011-03-02 23:26:43

2

尝试:

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

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