Đâ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";
}
}
}
perlcritic có thể có chức năng đó. – ikegami
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
Câu hỏi liên quan: http://www.perlmonks.org/?node_id=780433 – toolic