2012-02-09 3 views
5

Tôi đã tạo một kịch bản để thân mật với quản trị viên danh sách mô-đun cần được cài đặt trên máy.Kiểm tra danh sách mô-đun được cài đặt trong máy

Tôi đang cố gắng kiểm tra xem mô-đun có được cài đặt bằng mã dưới không. Điều kỳ lạ là nó đang hiển thị mô-đun thậm chí cài đặt trong máy như not installed

#!/usr/bin/perl -w 
    my @module_list =('Smart::Comments','HTML::Parse'); 
    foreach (@module_list) { 
     eval { require "$_" }; 
     if (!([email protected])) { 
     print "Module Not installed : $_\n"; 
     } 
    } 

Trả lời

5

Bạn cần phải sử dụng các hình thức chuỗi evalrequire cần một đối số bareword để phù hợp với hình thức đúp ruột-tách của tên mô-đun (ví dụ: Scalar::Util). (Nếu nó không phải là một bareword, sau đó nó cần phải được một đường dẫn tương đối, ví dụ như 'Scalar/Util.pm')

#!/usr/bin/perl 

use strict; 
use warnings; 

my @module_list = ('Scalar::Util', 'flibble'); 

foreach (@module_list) { 
    if (!eval "require $_") { 
     print "Module not installed: $_\n"; 
    } 
} 
+0

'đã xác định' là không bắt buộc. – ikegami

+2

'require' không chấp nhận một biểu thức không phải là một từ khóa, nhưng nó phải đánh giá tên tệp. (ví dụ: 'Smart/Comments.pm' thay vì' Smart :: Comments') – ikegami

1

App::Module::Lister của tôi, mà tôi thiết kế như một modulino có thể chạy như một mô-đun, một tiện ích dòng lệnh, hoặc một tập lệnh CGI. Đó là một điều đơn giản tôi cần cho một người bạn chỉ có quyền truy cập FTP vào máy chủ web.

Nó cung cấp cho bạn danh sách mọi thứ trong đường dẫn tìm kiếm mô-đun của Perl, mà tôi thường thấy dễ dàng hơn việc kiểm tra các mô-đun cụ thể mỗi lần. Khi tôi có toàn bộ danh sách, tôi chỉ nhìn vào danh sách.

Bạn có thể hãy kiểm tra xem bạn có thể tải mô-đun hay không, nhưng tôi không thích điều đó vì tôi không muốn chạy mã của mô-đun để xem nó có được cài đặt hay không. Nó thường không phải là một vấn đề, mặc dù.