2011-03-02 2 views
0

J'ai une classe de contrôleur Perl dans lequel je fais:Pourquoi la variable de paramètre est-elle vide?

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

Modèle Classe:

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

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

$param est vide. Quelle est l'erreur que je fais?

+0

Mise à jour avec des informations supplémentaires. –

Répondre

6

shift ne décale que la première valeur de @_. perldoc -f shift vous en dira plus sur le fonctionnement du décalage.

Vous voulez:

my($self, $param) = @_; 

Vous avait raison en new(). Je ne sais pas ce qui est arrivé;)

En fait, votre information, votre new() donnera l'avertissement:

Odd number of elements in hash assignment 

Si vous l'appelez comme $package->new('a'); Vous voudrez peut-être piège, quelque chose comme:

use Carp qw(croak confess); 
sub new { 
    my $class = shift; 
    confess "$class requires an even number of args" if(@_ & 1); 
    my %args = @_; 
    # ... 
} 

Ou en utilisant n'importe quel mécanisme de capture d'exception que vous utilisez.

+0

merci cela a fonctionné. – harshit

2

Essayez:

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

ou

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