2012-06-06 6 views
12

źródła analizowanie modułów CPAN widzę coś takiego:Dlaczego słowo kluczowe "pakiet" jest czasami oddzielone komentarzem od nazwy pakietu?

... 
package # hide from PAUSE 
    Try::Tiny::ScopeGuard; 
... 

Oczywiście, to pochodzący z Try::Tiny, ale widziałem tego rodzaju komentarzach między package Hasło i identyfikator pakietu w innych modułach też.

Dlaczego stosuje się tę procedurę? Jaki jest jego cel i jakie ma to zalety?

+2

Prawdopodobnie jakiś whacky hack, aby ukryć shacky pack z [Serwer Perl autorów Upload] (http://pause.perl.org/pause/query?ACTION = pause_04o), aby uniknąć niektórych przerwań PAUSE, które prawdopodobnie nie będą dla ciebie ważne, chyba że masz zamiar przesłać jakiś hacky pack do CPAN, co jest prawdopodobnie dobrą porą, aby dowiedzieć się, dlaczego ludzie to robią. Innymi słowy, nie mam pojęcia. :) – Lumi

+0

Wystarczy spojrzeć na stronę z linku i przypuszczam, że twój punkt jest bardzo bliski prawdy :). Wygląda na to, że ukrywa się przed automatycznym przetwarzaniem. Prawdopodobnie autor Perl powinien opowiedzieć nam całą historię dlaczego i kiedy jest używany/nie jest używany. – ArtM

+1

Sam komentarz nie ma żadnego efektu; Jest to podział linii. – ikegami

Odpowiedz

21

To rzeczywiście hack do ukrycia pakietu z indeksu PAUSE.

Po przesłaniu dystrybucji do PAUSE indeksator sprawdza każdy plik w przesyłanym pliku, szukając nazw pakietów zawartych w dystrybucji. Wszelkie indeksowane pakiety mogą pojawiać się w wynikach wyszukiwania CPAN.

Istnieje wiele powodów, dla których indeksowanie nie powinno być wykrywane. Twoja dystrybucja może zawierać wiele małych lub nieistotnych pakietów, które mogłyby zaśmiecić wyniki wyszukiwania twojego modułu. Możesz mieć pakiety zdefiniowane w twoim katalogu t (test) lub innym niestandardowym katalogu, który nie jest instalowany jako część dystrybucji. Twoja dystrybucja może zawierać pliki z zupełnie innej dystrybucji (napisanej przez kogoś innego).

Hack działa, ponieważ indeksator ściśle szuka słowa kluczowego package i wyrażenie, które wygląda jak nazwa pakietu w tym samym wierszu.

Obecnie możesz dołączyć do swojej dystrybucji plik META.yml. Indeksator PAUSE będzie szukać i respektować specyfikację no_index w tym pliku. Ale jest to względnie nowa funkcja indeksera, więc starsze moduły i współtwórcy starszego modułu CPAN będą nadal używać hackowania linii.

Oto przykład no_index specyfikacji z Forks::Super

no_index: 
    directory: 
     - t 
     - inc 
    package: 
     - Sys::CpuAffinity 
     - Signals::XSIG 
     - Signals::XSIG::Default 
     - Signals::XSIG::TieArray56 

Sys::CpuAffinity i Signals::XSIG są oddzielne dystrybucji, które są również dostarczone z Forks::Super. Niektóre skrypty testowe zawierają deklaracje package (np. Arbitrary::Test::Package), które nie powinny być indeksowane.

+1

Okazuje się, że jest to dokładnie taki hack, jaki myślałem. Tak jak fundamentalny skrypt powłoki, który łączy cały sklep i który nie był edytowany przez dwadzieścia lat. – Lumi

+0

Dzięki. Miałem przypuszczenie, że powinno to być w jakiś sposób związane nie z samym językiem, ale kto wie, jakie ukryte bity ma Perl. – ArtM

-3

Okay, oto kolejny urywek tego fenomenu ... Od kilkunastu lat hołubię Perla, rzadko widywałem tego paczkę i być może po prostu zignorowałem i nigdy nie zawracałem sobie głowy badaniem. Jedno wydaje się jednak jasne. W PAUSE dzieje się coś hackerskiego, które zostało stworzone w dobrej myśli Perl'n'UNIX, która bez cienia wątpliwości obejmuje liniowe przetwarzanie tekstu, więc parsują te pliki Perla, być może nawet używając grep, ale raczej perl sam, kto wie, aby wyodrębnić nazwy pakietów, a następnie kopnąć z jakiejś procedury lub uzyskać pewne statystyki lub cokolwiek innego. I potknąć się o tę procedurę i zhakować się po niej, autor dzieli deklarację paczki na dwie linijki, więc niełatwa praca grep nie ma pojęcia, że ​​paczka jest zadeklarowana tuż pod jego nosem, a programista jest szczęśliwy z powodu swoich hakowatych umiejętności a statystyki PAUSE lub cokolwiek to jest, że są razem, są takie, jakie być powinny. Czy to ma sens?

+1

Szczerze, nie, nie dużo. odpowiedź moby ma sens. PAUSE to FOSS, nawiasem mówiąc, zobacz pause.perl.org. – tsee

Powiązane problemy