http://www.perlmonks.org?node_id=185481


in reply to Warnings for unused subs

here is a simple, little program called find_unused_subs.pl:
#!/usr/bin/perl use strict; my $F = shift || die "no file specified"; my $xref_cmd = "$^X -MO=Xref,-r $F"; my %subdef; my %subused; my @fields = qw( file context line package sigil name action ); open TMP, "$xref_cmd |"; # Xref mangles up filenames, so we need to binmode it binmode TMP; while(<TMP>) { chomp; my %data; @data{ @fields } = split( /\s+/ ); if( $data{action} eq "subdef" and $data{package} eq "main" and $data{file} eq $F ) { $subdef{ $data{name} } = "$data{file}:$data{line}"; } if( $data{action} eq "subused" and $data{package} eq "main" and $data{file} eq $F ) { $subused{ $data{name} } = "$data{file}:$data{line}"; } } close TMP; foreach my $sub (keys %subdef) { next if exists $subused{ $sub }; print "$subdef{ $sub } $sub\n"; }
it only works on plain scripts, where subs are in the main package. feel free to enhance it :-)

cheers,
Aldo

__END__ $_=q,just perl,,s, , another ,,s,$, hacker,,print;