2010-04-21 11 views
5

Là người rất mới đối với Perl nhưng không phải ngôn ngữ động, tôi hơi ngạc nhiên trước cách quản lý mô-đun không thẳng về phía trước.Tại sao tôi không thể sao chép các mô-đun Perl đã cài đặt vào các máy khác?

Chắc chắn, cpan X hoạt động theo lý thuyết, nhưng tôi đang làm việc trên cùng một dự án từ ba máy và hệ điều hành khác nhau (tại nơi làm việc, ở nhà, thử nghiệm trong môi trường bên ngoài).

  • Tại nơi làm việc (Windows 7) Tôi có vấn đề sử dụng cpan vì bức tường lửa của chúng tôi mà làm cho ftp không sử dụng được
  • Ở nhà (Mac OS X) nó làm việc
  • Trong môi trường bên ngoài (Linux CentOS) nó làm việc sau giờ làm việc vì tôi không có quyền truy cập root và tôi phải định cấu hình cpan để hoạt động với tư cách người dùng không phải là người dùng gốc
  • Tôi đã thử trên một máy chủ khác mà tôi có quyền truy cập. Nếu môi trường bên ngoài trước đó là VPS và vì vậy tôi có quyền truy cập trình bao, tiện ích kia là dịch vụ lưu trữ chia sẻ giá rẻ mà tôi không có cách nào để cài đặt mô-đun mới ngoài các mô-đun được cài đặt sẵn

Hiện tại tôi vẫn không thể cài đặt Template trong Windows. Tôi đã thấy rằng như là một thay thế tôi có thể biên dịch nó và tôi cũng đã thử PPM ActiveState nhưng module không tồn tại ở đó.

Bây giờ, sự lúng túng của tôi là về Perl là ngôn ngữ động. Tôi đã có tất cả các loại vấn đề trong khi làm việc, ví dụ, với C, nơi tôi phải biên dịch tất cả các thư viện cho tất cả nền tảng, nhưng tôi nghĩ rằng với Perl, phương pháp tiếp cận sẽ rất giống với Python hoặc PHP ở đâu trong 90 % các trường hợp sao chép các mô-đun trong một thư mục và nhập nó chỉ đơn giản là hoạt động.

Vì vậy, câu hỏi của tôi: nếu mô-đun của Perl được viết bằng Perl, tại sao phương pháp sao chép/dán sẽ không hoạt động? Nếu một số (hoặc một phần nào đó) của các mô-đun phải được biên dịch, làm thế nào để nhìn thấy trong CPAN nếu một mô-đun là Perl chỉ hoặc nó dựa trên các thư viện biên dịch? Không có cách nào để tải về các mô-đun (tar, zip ...) và sử dụng cpan để triển khai nó? Điều này sẽ giải quyết vấn đề của tôi trong Windows.

+3

Khi mô-đun được viết bằng Perl, bạn * có thể * chỉ cần sao chép chúng xung quanh. Và có, bạn cũng có thể "cpan". mặc dù điều đó khiến bạn tự giải quyết các phụ thuộc. – hobbs

+0

VPS thường ngụ ý quyền truy cập root, không chỉ truy cập shell. – MkV

+1

Bạn đang sử dụng cái gì trên Windows? Dâu Perl, ActiveState, cái gì khác? Tôi tin rằng ppm có Bộ công cụ mẫu. Nếu bạn gặp sự cố khi cài đặt Bộ công cụ mẫu, bạn luôn có thể thử Mẫu :: Tiny chỉ phụ thuộc vào Capture :: Tiny mà lần lượt chỉ phụ thuộc vào mô-đun Perl cốt lõi – MkV

Trả lời

4

Trong môi trường bên ngoài (Linux CentOS) nó làm việc sau giờ bởi vì tôi không có quyền truy cập root và tôi phải cấu hình CPAN để hoạt động như một người dùng không phải root

Đây là một trong những lần khi nó giúp để biết The Trick. Trong trường hợp này, local::lib, cho phép bạn định cấu hình vùng cài đặt không phải gốc và tất cả các biến ENV trong khoảng ba phút.

nếu mô-đun của perl được viết bằng perl, tại sao phương pháp sao chép/quá khứ sẽ không hoạt động?

Một số được viết bằng Perl tinh khiết nhưng nhiều phần được viết một phần bằng C (sử dụng API XS của Perl) để có hiệu quả.

Đôi khi bạn kết thúc với các tình huống như JSON::XS, JSON::PPJSON::Any để tự động chọn cài đặt tốt nhất được cài đặt.

Có cách nào để tải xuống mô-đun (tar, zip ...) và sử dụng cpan để triển khai không?

Chương trình cpan là tất cả về việc nhận mọi thứ từ Internet. Bạn có thể tải gói (sẽ có một liên kết dọc theo dòng của "Download: CGI.pm-3.49.tar.gz" ở phía bên tay phải của trang CPAN), tar nó, sau đó

perl Makefile.PL 
make 
make install 

Có lẽ bạn nên tắt cấu hình cài đặt cpan của mình để chỉ sử dụng các nguồn HTTP (trong tùy chọn cấu hình urllist). Có thể đi xa tới create a mini CPAN mirror bên trong mạng của bạn.

+0

Lệnh cpan dành cho nhiều hơn là tìm nạp các bản phân phối. :) –

10

Hiện tại, Perl là một ngôn ngữ động, nhưng điều đó không ngụ ý rằng mọi thứ mọi người viết đều có thể di chuyển trên các nền tảng. Đó không phải là lỗi của ngôn ngữ. Nó không phải là lỗi của lập trình viên. Một số thứ, chẳng hạn như Win32::OLE không hoạt động trên Unix. :)

Các ngôn ngữ động khác sẽ có một số vấn đề tương tự. Nếu bạn phải biên dịch mã C, bạn sẽ không thể chỉ sao chép tệp sang một máy khác. Một số bản phân phối cấu hình mã hơi khác nhau tùy thuộc vào hệ điều hành của bạn, v.v.

Ngay cả khi bạn có thể sao chép tệp, bạn phải đảm bảo rằng bạn sao chép tất cả các tệp bạn cần. Bạn có biết mọi thứ bạn cần cho một mô-đun cụ thể không? Hãy nhớ rằng, nhiều người trong số họ có phụ thuộc.

Hầu hết các sự cố bạn đang gặp phải không liên quan gì đến ngôn ngữ. Bạn đang gặp rắc rối với các công cụ. Nếu bạn muốn có một công cụ CPAN không khớp xác nhận tất cả các quyết định cho bạn, hãy thử cpanminus. Đó là điều tương tự mà bạn muốn có được trong số cpan (mặc dù mã khác nhau), nhưng nó làm cho tất cả các quyết định cho bạn. Nó không chạy bất kỳ bài kiểm tra phân phối nào và nó sẽ cài đặt vào thư mục người dùng của bạn. Khi bạn cần điều gì đó cho bạn quyền kiểm soát, hãy quay lại cpan.

+1

"Win32 :: OLE không hoạt động trên Unix." - Tôi ngửi thấy một phim hoạt hình XKCD tiềm năng ở đâu đó trong đó> =) – DVK