2012-09-05 32 views
16

Đối với Python, có một tập lệnh gọi là importchecker cho bạn biết nếu bạn có các câu lệnh import không cần thiết.Có công cụ nào để kiểm tra tập lệnh Perl cho các câu lệnh sử dụng không cần thiết không?

Có tiện ích tương tự cho báo cáo Perl use (và require) không?

+0

perlcritic có thể có chức năng đó. – ikegami

+1

Lưu ý rằng không có giải pháp nào chính xác 100%. 'use Module;' có thể là false âm. 'sử dụng qw nghiêm ngặt (refs);' có thể là một dương tính giả. 'sử dụng mô-đun qw (: TẤT CẢ);' có thể là số âm sai và sai số dương. – ikegami

+0

Câu hỏi liên quan: http://www.perlmonks.org/?node_id=780433 – toolic

Trả lời

5

Hãy xem Devel::TraceUse nó có thể cung cấp cho bạn một đoạn nội dung bạn đang tìm kiếm.

+0

Điều đó dường như cho tôi biết những gì đang được tải. Tôi muốn biết những gì đang được nạp nhưng không được sử dụng. –

+0

Bạn có muốn phân tích mã tĩnh hay phân tích thời gian chạy không? –

+0

Phân tích mã tĩnh. –

3

Đây là số script I wrote để thực hiện việc này. Nó rất đơn giản và sẽ không tự động hóa bất cứ điều gì cho bạn nhưng nó sẽ cung cấp cho bạn một cái gì đó để bắt đầu.

#!/usr/bin/perl 

use strict; 
use v5.14; 

use PPI::Document; 
use PPI::Dumper; 
use PPI::Find; 
use Data::Dumper; 

my %import; 
my $doc = PPI::Document->new($ARGV[0]); 

my $use = $doc->find(sub { $_[1]->isa('PPI::Statement::Include') }); 
foreach my $u (@$use) { 
    my $node = $u->find_first('PPI::Token::QuoteLike::Words'); 
    next unless $node; 
    $import{$u->module} //= []; 
    push $import{$u->module}, $node->literal; 
} 

my $words = $doc->find(sub { $_[1]->isa('PPI::Token::Word') }); 


my @words = map { $_->content } @$words; 

my %words; 
@words{ @words } = 1; 

foreach my $u (keys %import) { 
    say $u; 
    foreach my $w (@{$import{$u}}) { 
     if (exists $words{$w}) { 
      say "\t- Found $w"; 
     } 
     else { 
      say "\t- Can't find $w"; 
     } 
    } 
} 
+1

Tôi nhận được một lỗi biên dịch khi tôi cố gắng chạy mã này trên perl v5.12.2: 'Loại arg 1 để đẩy phải là mảng (không phải phần tử băm) tại dòng unused.pl, gần" -> chữ; "' – toolic

+1

có thể là một điểm khởi đầu tốt đẹp để mở rộng https://metacpan.org/release/Perl-Critic-StricterSubs – toolic

+0

Nó thực sự cần phải có 5,14 cho mảng arrayref. – stu42j