2010-03-04 8 views

cevap

18

ilk coderef argüman koyun:

sub function (&$) { 
    my $code = shift; 
    my $param1 = shift; 
    # do something with $param1 and $code 
} 

function { print "i'm inside the coderef\n" } "whatever"; 

kısmı şöyledir perlsub adam sayfasını bakınız:

Bir "&" anonim bir alt yordam, gerektiren, ilk argümanı olarak eğer , , "alt" anahtar sözcüğü veya sonraki virgül gerektirmez.
+0

İlk argüman olduğunda neden çalışmıyor? – Geo

+5

@Geo, işe yarayabilir, ancak daha açık olmanız gerekir: 'function (" ne olursa olsun ", alt {print" coderef içerisindeyim \ n "});' 'ismi BLOCK EXPR '' sözdizimi yalnızca çalışırsa çalışır coderef önce gelir. – friedo

+4

Sadece bu şekilde tasarlandığından. İlk etapta, kullanıcıların, harita ve grep gibi küçük bir kod parçacığını alan yerleşik işlevler gibi çağrılabilen altprogramlar yazmasına izin vermenin ana nedeninden şüpheleniyorum, ancak daha esnek bir şey muhtemelen hızlı bir şekilde kafa karıştırıcı olabilir. – Sean

-3

Burada, $ &, Perl'in tam deseni eşleştirmek için kullanılan özel değişkenidir. (bağlamınızda yanlış kullandınız) $ `, verilen desenden önceki dizeyle eşleşmek için kullanılır. $ ', verilen şablondan sonra dizeyle eşleşmek için kullanılır.

+1

OP'nin kullandığı bağlamda, bu bir işlev prototipidir. Http://perldoc.perl.org/perlsub.html#Prototypes sayfasına bakın – friedo