2009-07-23 20 views
5

Nó sẽ giúp tôi hiểu những gì mô-đun Tôi có nếu tôi hiểu lý do module kết thúc trong các thư mục khác nhau dưới @ INCCác thư mục khác nhau trong @INC được sử dụng để làm gì?

Dưới ActiveState trên cửa sổ đó là khá rõ ràng

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

Đầu tiên là cốt lõi Perl thứ trong khi 2 là những thứ tôi đã cài đặt qua PPM (có tôi có quyền này?)

Tuy nhiên dưới Debian có vẻ như rất nhiều 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 

Lý do cho rất nhiều thư mục và những gì diễn ra ở đâu.

Trả lời

4

Dựa trên các tập tin trong các thư mục, và kiến ​​thức của tôi về Perl, tôi sẽ nói họ phá vỡ như thế này:

  • /etc/perl - Một số module Perl viết ra file cấu hình. Hai ví dụ trong số này là CPAN và các mô-đun trong phân phối libnet. Các máy dựa trên Debian lưu trữ các tệp cấu hình này tại đây.
  • /usr/local/lib/perl/5.8.4 - Đây là nơi các tập tin nền tảng cụ thể được cài đặt bên ngoài của hệ thống gói đi.
  • /usr/local/share/perl/5.8.4 - Đây là nơi các tập tin nền tảng độc lập được cài đặt bên ngoài của hệ thống gói đi.
  • /usr/lib/perl5 - Đây là nơi các tệp nền tảng cụ thể được cài đặt bởi hệ thống gói đi.
  • /usr/share/perl5 - Đây là nơi các tệp độc lập nền tảng được cài đặt bởi hệ thống gói đi.
  • /usr/lib/perl/5.8 - Đây là các tập tin nền tảng cụ thể là một phần của lõi
  • /usr/share/perl/5.8 - Đây là các tập tin nền tảng độc lập mà là một phần của lõi
  • /usr/local/lib/site_perl - Đây là nơi bạn có thể cài đặt các module của riêng bạn (nếu họ không có trình cài đặt kiểu CPAN, mà họ thực sự cần).
+0

này chỉ dành cho Debian. Nó không phải là một thứ Perl. –

+0

@brian d foy Tại sao chính xác bạn cảm thấy cần phải nói rằng khi câu hỏi được hỏi cụ thể về gói Debian Perl và đề cập đến phiên bản của ActiveState là khác nhau? Đây rõ ràng là Debian. Ngay cả câu trả lời của tôi cũng đề cập đến Debian. –

+0

Bạn đề cập đến debian, nhưng nó không rõ ràng là debian chỉ hơn là một điều Windows so với Linux. Thật vậy, câu trả lời tốt không cho rằng bất cứ điều gì là hiển nhiên :) –

1

Tôi nghĩ rằng đây là bởi vì có rất nhiều cách bạn có thể cài đặt một module - CPAN, tar.gz, deb gói - và tất cả đều cố gắng không để gây rối với đồ dùng khác anh chàng.

Khi tìm kiếm mô-đun,% INC là rất tiện dụng. Nó lưu trữ tên của tất cả các mô-đun và vị trí, nơi chúng được tải từ.

Ví dụ, chạy này:

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

Cung cấp cho tôi:

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 

này rất hữu ích đặc biệt là khi các mô-đun được cài đặt nhiều lần vào địa điểm khác nhau.

7

Xem Debian's Perl Policy on paths cho lý và sử dụng tất cả nhưng là người đầu tiên và cuối cùng của những người. Tôi đoán rằng /etc/perl sẽ dành cho các mô-đun chỉ chứa dữ liệu cấu hình và /usr/local/lib/site_perl để chia sẻ các mô-đun phụ thuộc vào kiến ​​trúc không phụ thuộc vào kiến ​​trúc với một Perl không được đóng gói Debian?

3

Bạn cũng có thể tìm thấy gần đây của Schwern Use.perl journal entry trên lõi/nhà cung cấp/trang web hữu ích cho một số nền.

4

Perl không thực sự quan tâm và cách Debian dựa trên cách làm đặc biệt của riêng họ. Nó thực sự tùy thuộc vào người cấu hình và cài đặt Perl. Ví dụ, tôi giữ tất cả những thứ cho tất cả các perls của tôi dưới thư mục riêng của họ kể từ khi tôi có rất nhiều cài đặt:

/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 
. 

Các Perl xây dựng hệ thống nhận ra tiềm năng ba loại cài đặt các thư mục mà bạn có thể đọc trong ExtUtils::MakeMaker hay Module::Build:

  • lõi - cho những thứ đi kèm với Perl
  • trang web - những thứ người dùng địa phương cài đặt
  • nhà cung cấp - những thứ các nhà cung cấp hệ điều hành cài đặt cho bạn o r thông qua hệ thống gói của họ

Chủ yếu là bạn không phải lo lắng về điều này nếu bạn cài đặt công cụ của riêng bạn bằng các công cụ CPAN vì chúng sẽ đưa nội dung vào thư mục trang web cho bạn. Tuy nhiên, một số phân phối mô-đun Perl có thể gây rối với các cài đặt hệ thống xây dựng để cài đặt vào các thư mục lõi hoặc nhà cung cấp.

Debian có số own policy mà tôi nghĩ là hơi phức tạp, nhưng nó hoạt động cho chúng.

Hệ thống ActiveState thực sự được thiết lập thành giải pháp chủ yếu do ActiveState quản lý để bạn cài đặt mọi thứ thông qua PPM. Họ chủ yếu quan tâm đến việc cài đặt doanh nghiệp ổn định và được kiểm tra, nơi họ xử lý hầu hết mọi thứ cho bạn. Nếu bạn muốn tự mình làm mọi thứ, bạn sử dụng Strawberry Perl cũng có bố cục thư mục module đơn giản.

tôi không sử dụng Perl của Apple cho các công cụ của riêng tôi, nhưng họ có một thiết lập ngốc nghếch quá:

/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 
Các vấn đề liên quan