use 5.032001; use warnings; use Data::Dumper; use Devel::Symdump; use Path::Tiny; use PPR::X; use lib qw(.); sub scan4subs { my ($file)=@_; my @packages; # use PPR:X to scan for package and get their names: my $text=(path($file)->slurp); while ($text =~ m{((?&PerlPackageDeclaration)) $PPR::X::GRAMMAR}gx) { push @packages,$1 =~ m{package\ ([:\w]+) }x; }; #warn Data::Dumper->new([\@packages],[qw(*packages)])->Deepcopy(1)->Indent(1)->Maxdepth(3)->Sortkeys(1)->Dump(),q{ }; # Use Devel::Symdump to dump the functions: require $file; my @subs; for my $package(@packages) { my $obj=Devel::Symdump->new($package); push @subs,$obj->functions; #warn Data::Dumper->new([\@subs],[qw(*functions)])->Deepcopy(1)->Indent(1)->Maxdepth(3)->Sortkeys(1)->Dump(),q{ }; }; return \@subs; }; print "@{scan4subs('Fee.pm')}";