Próbuję dowiedzieć się, który moduł w moim CGI :: Aplikacja ładuje łosia. Próbowałem przeciążać "wymaganie", ale wydaje mi się, że nie mam odpowiedniej składni. Jeśli ktoś mógłby oczyścić następujący kod bym to docenić:Jak dowiedzieć się, który moduł ładuje Łosia?
use strict;
use warnings;
use Carp qw//;
BEGIN {
*CORE::GLOBAL::require = sub (*) {
warn "Requiring $_[0] at: " . Carp::longmess();
CORE::require (@_);
};
}
Zasadniczo, problem z tym scenariuszem jest to, że nie jest faktycznie ładowania czegokolwiek. Kiedy CORE :: require (@) jest wywoływane, nie "nic" robi. Próbowałem po prostu przekazać mu nazwę skryptu bezpośrednio za pomocą $ [0], ale to spowodowało tylko zakleszczenie skryptu, dopóki nie upłynął limit czasu.
UWAGA: Powyższy skrypt jest na początku mojego rozruchu skryptu
Doskonała odpowiedź! Podoba mi się to szczególnie, ponieważ unikasz łatania Moose.pm w jakikolwiek sposób. Zamiast tego korzystasz z rzadko używanej, ale bardzo fajnej funkcji '@ INC'. – daotoad
Jeśli umieścisz to wewnątrz metody importowania w "wholoads.pm" i sprawdzisz z pierwszym argumentem metody, możesz użyć go jako "perl -Mwholoads = Moose yourscript.pl". Rozważę też użycie Carp :: cluck(), aby uzyskać pliki stacktrack, ponieważ obejmie to również moduły ładujące lazy w środowisku wykonawczym. – phaylon
@phaylon: Świetny pomysł. Chociaż nie zdziwiłbym się, gdyby istniał moduł, który już to wszystko zrobił na CPAN? Jeśli nie, to brzmi jak nowy projekt! – draegtun