2011-03-02 72 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; 
}