2015-08-29 8 views
7

W niektórych modułów perla widzę kod:Jaki jest powód użycia znaku "-" do wpisania nazwy skrótu w haśle?

if (exists $h->{Location}) { 
    %args = (%args, -Status => 302); 
} 

Dlaczego autor używa -Status zamiast tylko Status?
Dlaczego włamuję się do własnych modułów, kiedy muszę użyć znaku "-" w nazwach skrótów klawiszowych?

UPD
odpowiedzi czytania wydaje się, że to musi być takie same, ale nie są one

my $a = { -status => 'a', status => 3, }; 
print $a->{ status }, $a->{ -status }; 
print pp $a; 

WYJŚCIE

3a{ -status => "a", status => 3 } 

Podsumowanie moich perl5 (rewizja 5 wersja 20 Subversion 2) konfiguracja:

Czy to oznacza, że ​​stary moduł jest teraz zepsuty?

Odpowiedz

1

Jest to konwencja. Podobne do opcji, które program może pobrać z wiersza poleceń, na przykład "ls -l". Wielu programistów Perla używa go jako bardziej przejrzystego przy przekazywaniu parametrów do podprogramu. W ten sposób Twoje programy są bardziej czytelne i łatwe w utrzymaniu.

5

To historyczny artefakt. Jednym z pierwszych głównych modułów wykorzystujących konwencję argumentu hash-key dla swoich funkcji był Perl/Tk i wprowadził on konwencję nazewnictwa początkowego na kluczach z TCL/Tk (z którego został przeniesiony). Rozprzestrzenił się i był dość popularny przez jakiś czas. Wcześniej, zanim mieliśmy "gruby przecinek" (=>) operator pomógł nieco w odróżnianiu nazw kluczy i ich argumentów. Dziś nie ma powodu, by go używać, poza osobistym gustem.

+0

Czy masz na myśli to, że status i status wskazują na ten sam klucz? –

+1

Nie. Albo przynajmniej nie automatycznie. –