2015-04-27 18 views
9

Jak mogę utworzyć podprogram, który można analizować argumenty tak:Perl argumenty podprogramów jak hash

&mySub(arg1 => 'value1', arg2 => 'value2' ...); 

sub mySub() { 
    # what do I need to do here to parse these arguments? 
    # no arguments are required 
} 
+7

Nie powinieneś wywoływać funkcji za pomocą składni '& mySub'; po prostu użyj 'mySub'. Zobacz [Kiedy powinienem użyć & do wywołania podprocedury Perla?] (Http://stackoverflow.com/questions/1347396/when-dould-i-use-the-to-call-a-perl-subroutine) – ThisSuitIsBlackNot

+2

FYI (i dla przyszłych pracowników Google'a, ponieważ wydaje się to być dobrym kanonicznym pytaniem), to, co opisujesz, często nazywane są "nazwanymi parametrami" lub "nazwanymi argumentami". – ThisSuitIsBlackNot

+1

@ThisSuitIsBlackNot: to pytanie jest adresowane, kiedy powinieneś używać '&' i kiedy absolutnie nie powinieneś. To i jego odpowiedzi nie obsługują szerokiego "Nie powinieneś wywoływać funkcji za pomocą & edict". – ysth

Odpowiedz

18

Wystarczy przypisać tablicę wejściową do mieszania:

sub my_sub { 
    my %args = @_; 
    # Work with the %args hash, e.g. 
    print "arg1: ", $args{arg1}; 
} 

Jeśli chcesz, aby zapewnić wartości domyślne, można użyć:

sub my_sub { 
    my %args = ('arg1' => 'default arg1', 
       'arg2' => 'default arg2', 
       @_); 
    # Work with the (possibly default) values in %args 
} 
0

może również znaleźć bardzo użyteczne w Method::Signatures modu le, co pozwoli ci zrobić coś takiego:

func MySub (Str :$arg1 = 'default arg1', Str :$arg2 = 'default arg2') { 
    print "arg1: ", $arg1}; 
}