прототип функции в Perl - PullRequest
3 голосов
/ 25 марта 2012

Я пытаюсь создать подпрограмму mypush с аналогичной функциональностью встроенной функции push, но приведенный ниже код не работает должным образом.

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

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

Ответы [ 2 ]

11 голосов
/ 25 марта 2012

В этой строке:

    myPush(@planets,"Test");

Perl еще не видел прототип, поэтому он не может его применить.(Если вы включите предупреждения, которые вы всегда должны делать, вы получите сообщение main::myPush() called too early to check prototype.)

Вы можете создать подпрограмму до того, как вы ее используете:

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

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

или, по крайней мере, предварительно объявите его с его прототипом:

    sub myPush (\@@);

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

    sub myPush (\@@) {
         my $ref = shift;
         my @bal = @_;
         print "\@bal :  @bal\nRef : @{$ref}\n";
         #...
    }
0 голосов
/ 15 апреля 2012

Если вы уверены в функциях и их названиях, вы можете просто поставить амперсанд перед вызовом:

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

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