use strict; use warnings; my $script_name = shift or die; my @lines = `perl -MO=Xref,-r $script_name` or die; my %used_subs; my %defined_subs; foreach (@lines) { my ($file, $subr, $line, $package, $type, $object, $event) = split; next if $file ne $script_name or $type ne '&' or $package ne 'main'; if ( $event eq 'subdef' ) { $defined_subs{$object} = 1; } elsif ( $event eq 'subused' ) { $used_subs{$object} = 1; } } foreach my $key ( sort keys %defined_subs ) { next if $used_subs{$key}; print "Sub not directly called: '$key'\n"; }