2009-07-23 14 views
5

To pomogłoby mi zrozumieć, co mam moduł jeśli zrozumiałem moduły powodów kończy się w różnych katalogach pod @ INCDo czego służą różne katalogi w @INC?

Under ActiveState na Windows jest dość jasne

C:/Perl/lib 
C:/Perl/site/lib 

Pierwszym jest rdzeń Perl rzeczy, podczas gdy 2 to rzeczy mam zainstalowane poprzez ppm (ja mam to prawo?)

jednak pod Debianem wydaje się dużo bardziej compicated

/etc/perl 
/usr/local/lib/perl/5.8.4 
/usr/local/share/perl/5.8.4 
/usr/lib/perl5 
/usr/share/perl5 
/usr/lib/perl/5.8 
/usr/share/perl/5.8 
/usr/local/lib/site_perl 

Jaki jest powód tak wielu katalogów i co tam się dzieje.

Odpowiedz

4

podstawie plików w tych katalogach, a moja znajomość Perl, powiedziałbym oni rozbić tak:

  • /etc/perl - Niektóre moduły Perl pisać plików konfiguracyjnych. Dwa z nich to: CPAN i moduły w dystrybucji libnet. Maszyny oparte na Debianie przechowują tutaj te pliki konfiguracyjne.
  • /usr/local/lib/perl/5.8.4 - To gdzie pliki specyficzne dla platformy zainstalowane poza systemem pakietu odejść.
  • /usr/local/share/perl/5.8.4 - To gdzie pliki niezależny od platformy zainstalowane poza systemem pakietu odejść.
  • /usr/lib/perl5 - To gdzie pliki specyficzne dla platformy instalowane przez system pakietów iść.
  • /usr/share/perl5 - Tutaj są uruchamiane pliki niezależne od platformy instalowane przez system pakietów.
  • /usr/lib/perl/5.8 - Są to pliki dla konkretnych platform, które są częścią rdzenia
  • /usr/share/perl/5.8 - Są to pliki, niezależny od platformy, które są częścią rdzenia
  • /usr/local/lib/site_perl - To gdzie można zainstalować własne moduły (jeśli nie mają instalatorów w stylu CPAN, co naprawdę powinni).
+0

ten służy wyłącznie do Debiana. To nie jest rzecz Perla. –

+0

@brian d Foy Dlaczego dokładnie czułeś potrzebę przedstawienia, że ​​gdy pytanie pyta konkretnie o pakiecie Debian Perl i wspomina, że ​​wersja ActiveState jest inna? Jest to oczywiście tylko Debian. Nawet moja odpowiedź wspomina o Debianie. –

+0

Możesz wspomnieć Debian, ale nie jest to oczywiste, że jest to debian tylko zamiast Windows kontra Linux rzeczy. Rzeczywiście, dobre odpowiedzi nie zakładają niczego, co jest oczywiste :) –

1

Myślę, że to dlatego, że istnieje wiele sposobów, które można zainstalować moduł - cpan, tar.gz, pakiet deb - i wszyscy starają się nie bałagan z rzeczy na inny facet.

Podczas poszukiwania modułu% INC jest bardzo poręczny. Przechowuje nazwy wszystkich modułów i lokalizacji, z których są one ładowane.

Na przykład, działa w ten sposób:

perl -MDBI -e 'print join "\n", map { $_ . " = " . $INC{$_} } keys %INC' 

daje mi:

XSLoader.pm = /usr/lib/perl/5.10/XSLoader.pm 
warnings/register.pm = /usr/share/perl/5.10/warnings/register.pm 
Carp.pm = /usr/share/perl/5.10/Carp.pm 
Scalar/Util.pm = /usr/lib/perl/5.10/Scalar/Util.pm 
Exporter/Heavy.pm = /usr/share/perl/5.10/Exporter/Heavy.pm 
vars.pm = /usr/share/perl/5.10/vars.pm 
strict.pm = /usr/share/perl/5.10/strict.pm 
Exporter.pm = /usr/share/perl/5.10/Exporter.pm 
List/Util.pm = /usr/lib/perl/5.10/List/Util.pm 
warnings.pm = /usr/share/perl/5.10/warnings.pm 
DBI.pm = /usr/lib/perl5/DBI.pm 
AutoLoader.pm = /usr/share/perl/5.10/AutoLoader.pm 
Config.pm = /usr/lib/perl/5.10/Config.pm 
DynaLoader.pm = /usr/lib/perl/5.10/DynaLoader.pm 

Jest to przydatne zwłaszcza wtedy, gdy moduł jest zainstalowany kilka razy w różnych miejscach.

7

Zobacz Debian's Perl Policy on paths na uzasadnienie i wykorzystania wszystkich ale pierwszy i ostatni z nich. Zgaduję, że /etc/perl będzie dla modułów, które zawierają tylko dane konfiguracyjne i /usr/local/lib/site_perl do udostępniania modułów nie zależnych od architektury, nie zależnych od wersji, z perlu spakowanym poza Debianem?

4

Perl tak naprawdę nie obchodzi, a Debian robi to w oparciu o własny specjalny sposób robienia wszystkiego. To naprawdę zależy od osoby, która konfiguruje i instaluje Perla. Na przykład, ja trzymać wszystkie rzeczy dla wszystkich moich perls w swoich katalogach, ponieważ mam tak wiele zainstalowane:

/usr/local/perls/perl-5.10.0/lib/perl5/darwin-2level 
/usr/local/perls/perl-5.10.0/lib/perl5 
/usr/local/perls/perl-5.10.0/lib/5.10.0/darwin-2level 
/usr/local/perls/perl-5.10.0/lib/5.10.0 
/usr/local/perls/perl-5.10.0/lib/site_perl/5.10.0/darwin-2level 
/usr/local/perls/perl-5.10.0/lib/site_perl/5.10.0 
. 

Perl budować systemy rozpoznać potencjalnie trzy rodzaje zainstalować katalogi, które można przeczytać w ExtUtils::MakeMaker lub Module::Build:

  • rdzeń - dla materiału dostarczonego z Perl
  • strony - rzeczy lokalny użytkownik instaluje
  • sprzedawca - rzeczy sprzedawca OS instaluje je za ciebie o r przez ich system paczek

Głównie nie musisz się tym martwić, jeśli instalujesz własne rzeczy za pomocą narzędzi CPAN, ponieważ będą one umieszczać rzeczy w katalogach witryny dla ciebie. Jednak niektóre dystrybucje modułów Perla mogą nie działać z ustawieniami systemu kompilacji, aby zainstalować je w katalogach głównych lub dostawców.

Debian ma swoje own policy, co moim zdaniem jest nieco skomplikowane, ale działa na nich.

System ActiveState jest naprawdę skonfigurowany jako rozwiązanie zarządzane głównie przez ActiveState, dzięki czemu można zainstalować wszystko za pomocą PPM. Dotyczą one głównie stabilnych i przetestowanych instalacji dla przedsiębiorstw, w których obsługują większość rzeczy. Jeśli chcesz zrobić wszystko sam, użyj Strawberry Perl, który ma również prosty układ katalogu modułów.

nie używam Apple Perl dla własnej rzeczy, ale mają głupkowaty set-up TOO:

/System/Library/Perl/5.8.8/darwin-thread-multi-2level 
/System/Library/Perl/5.8.8 
/Library/Perl/5.8.8/darwin-thread-multi-2level 
/Library/Perl/5.8.8 
/Library/Perl 
/Network/Library/Perl/5.8.8/darwin-thread-multi-2level 
/Network/Library/Perl/5.8.8 
/Network/Library/Perl 
/System/Library/Perl/Extras/5.8.8/darwin-thread-multi-2level 
/System/Library/Perl/Extras/5.8.8 
/Library/Perl/5.8.6 
/Library/Perl/5.8.1 
Powiązane problemy