perlmod wyjaśnia te specjalne bloki, ale rzeczywiście tylko BEGIN
i END
są powszechnie używane. Są to tylko tablice CV, LIFO lub FIFO. Te bloki pozwalają na oddzielne taktowanie po uruchomieniu kodu, niezależnie od lokalizacji w pliku źródłowym. Możesz więc zachować sekcje kodu razem, ale są one wykonywane o różnych porach (PHASES
).
KONTROLA dodano początkowo do uruchomienia pakietu kompilatora O (-MO=C...
) w ustalonej kolejności po inicjalizacji modułu (pakiet użytku), a przed głównym programem, aby móc przechowywać kontekst wykonanie tam. Oddziela to czas kompilacji (przed) od czasu wykonywania (po). perl -c
zatrzymuje się po SPRAWDŹ.
Ponieważ jestem opiekunem kompilatorów, używam CHECK i -MO = szeroko. Moje moduły compile()
są wywoływane przez O w bloku CHECK. Z Od (debugowania O) Wywołuję metodę compile
nie w CHECK, ale później w INIT, więc debugger wkracza w to. Debugger nie wkracza do bloków CHECK domyślnie, należy go wymusić za pomocą $DB::single=1
lub użyć Od.
UNITCHECK został dodany później do kompilacji i ładowania modułów drobnoziarnistych, zwł. Pliki .pmc
.
Nigdy dotąd tego nie używałem. Może się również zdarzyć w czasie wykonywania, więc mogę go użyć do sprawdzenia typów modułów ładowanych podczas pracy.
INIT został dodany, aby umożliwić oddzielną inicjalizację klasy.
Ja rzadko używam tego, ale jest to przydatne.
Teraz pamiętam, dlaczego nie chciałem "wymagać modułu, modułu-> import (@stuff)". To dlatego, że miałem już zestaw skryptów testowych, które chciałem móc debugować, i nie chciałem edytować instrukcji 'use Module' w każdym pliku. – mob
Nie trzeba przechodzić przez te wygłuszenia, aby debugować kod kompilacji. Wystarczy umieścić $ DB :: single = 1 w dowolnym miejscu źródła, a debugger zatrzyma się w tym momencie, bez względu na to, w której fazie przetwarzania znajduje się program. (Patrz http://perldoc.perl.org/perldebug.html#Debugging -compile-time-statement) –
Dzięki Brian! Dobrze wiedzieć. – mob