2012-03-25 25 views
3

Ich versuche, das Unterprogramm Mypush mit ähnlicher Funktionalität der integrierten Push-Funktion zu erstellen, aber der folgende Code funktioniert nicht richtig.Funktionsprototyp in Perl

@planets = ('mercury', 'venus', 'earth', 'mars'); 
    myPush(@planets,"Test"); 

    sub myPush (\@@) { 
     my $ref = shift; 
     my @bal = @_; 
     print "\@bal : @bal\nRef : @{$ref}\n"; 
     #... 
    } 

Antwort

11

An dieser Linie:

myPush(@planets,"Test"); 

Perl hat noch nicht den Prototyp zu sehen ist, so kann es sie nicht gelten. (. Wenn Sie auf Warnungen, den sie immer, sollen Sie eine Nachricht bekommen, dass main::myPush() called too early to check prototype)

Sie entweder Ihr Unterprogramm vor erstellen können Sie es verwenden:

sub myPush (\@@) { 
     my $ref = shift; 
     my @bal = @_; 
     print "\@bal : @bal\nRef : @{$ref}\n"; 
     #... 
    } 

    @planets = ('mercury', 'venus', 'earth', 'mars'); 
    myPush(@planets,"Test"); 

oder aber zumindest Voraus erklärt es mit seinem Prototyp:

sub myPush (\@@); 

    @planets = ('mercury', 'venus', 'earth', 'mars'); 
    myPush(@planets,"Test"); 

    sub myPush (\@@) { 
     my $ref = shift; 
     my @bal = @_; 
     print "\@bal : @bal\nRef : @{$ref}\n"; 
     #... 
    } 
0

Wenn Sie sicher, dass die Funktionen und ihre Namen sind, die Sie gerade ein kaufmännische vor dem Aufruf setzen können:

@planets = ('mercury', 'venus', 'earth', 'mars'); 
&myPush(@planets,"Test"); 

sub myPush (\@@) { 
    my $ref = shift; 
    my @bal = @_; 
    print "\@bal : @bal\nRef : @{$ref}\n"; 
    #... 
}