2010-05-21 20 views

cevap

10

otypes ve ben onları çoğu yerde onlardan uzak tutmayı tercih ederim. Sadece prototip atlayıp el başvuruları geçirebilirsiniz: sen hiç referanslarla işe yaramadıysa, güzel öğretici için perlreftut kontrol

sub foo { 
    my $arr1 = shift; 
    my $arr2 = shift; 

    # Access arrays as references 
} 

foo(\@wiz, \@waz); # Pass in wiz/waz as refs 
foo([1,2,4],[3,5,6]); # Hard coded arrays 

.

+0

Bu, prototipin, kullanıcının liste argümanlarını geçmek için özel bir şey yapmasını gerektirmediğinden daha iyi bir çözüm olduğu anlaşılıyor. teşekkürler – Mike

+14

@Mike, Tecrübeli bir perl programcısının referansı geçme zorunluluğundan daha çok şaşıracaklarından dolayı prototiplere karşı öneride bulunacağım. Prototiplerin neden çatlatıldığına dair daha fazla bilgi için http://stackoverflow.com/questions/297034/why-are-perl-function-prototypes-bad adresine bakın. – daotoad

+0

@Mike, prototipleri sıklıkla kullandığım prototip belirtiminde hata yaptığımı sık sık kullanıyorum. Bu yüzden kod örneğimi denediyseniz ve işe yaramadıysa, prototipteki değişikliği not edin. – daotoad

5

Değerlere göre iki liste iletirseniz, @_ numaralı telefondan büyük bir liste alırsınız.

:

1 2 3 5 6 7 
<blank line> 

başvuruyla onları geçmek gerekirdi iki dizileri geçmesi için: Bu baskı sona erecek

#!/usr/bin/perl 

sub test 
{ 
    my (@a, @b) = @_; 

    print "@a\n"; 
    print "@b\n"; 
} 

my @array1 = (1,2,3); 
my @array2 = (5,6,7); 

test(@array1, @array2); 

:

my(@list1,@list2) = @_; herhangi bir anlam ifade etmez

test(\@array1, \@array2); 

Ve altınızda bunları referans olarak görmeniz gerekir:

sub test 
{ 
    my ($arrayRef1, $arrayRef2) = @_; 
    print "@$arrayRef1\n"; 
    print "@$arrayRef2\n"; 
} 
İlgili konular