2011-08-24 21 views

Odpowiedz

11

: method jest function attribute opis. Tak zdefiniowany podprogram nie wywoła ostrzeżenia "Niejednoznaczne wywołanie rozwiązane jako CORE ::% s".

Od ysth „s komentarz:

Ostrzeżenie dzieje, gdy sub ma taką samą nazwę jak wbudowane i nazywa bez & a nie jako wywołanie metody; perl zamiast tego używa wbudowanego, ale ostrzega. Metoda: powoduje wyciszenie ostrzeżenia, ponieważ wyraźnie wskazuje, że sub nigdy nie było tak nazwane jako metoda nie-metoda.

Aktualizacja

Ten kod po prostu wywołuje metodę bar gdy foo nazywa się:

sub foo : method { ## Mark function as method 
    shift->bar(@_) ## Pass all parameters to bar method of same object 
} 

Więcej szczegółów:

  • : method - Wskazuje, że odwołuje podprogram jest metoda . Tak zdefiniowany podprogram nie wywoła ostrzeżenia "Niejednoznaczne wywołanie rozwiązane jako CORE ::% s".
  • shift - pobiera pierwszy parametr z @_, który będzie $self
  • ->bar(@_) - wywołanie tej samej metody klasy bar ze wszystkimi innymi parametrami

Można odczytać to jako:

sub foo : method { 
    my ($self) = shift @_; 
    return $self->bar(@_); 
} 
+0

Co ' sub foo: method {shift-> bar (@_)} "średnia jako całość? – asker

+0

Dodałem więcej szczegółów –

+0

Wygląda na to, że nadal działa bez atrybutu 'method', prawda? – asker

Powiązane problemy