in reply to Accessing list of package names in a module

my $source = do { local(*ARGV, $/); @ARGV = $INC{'Util/Stuff.pm'}; <>; }; my @packages = $source =~ m/package\s+[_a-zA-Z][^\S;]*;/g;
I would use Module::Info
my $mod = Module::Info->new_from_module('Some::Module'); my @packages = $mod->packages_inside;

Replies are listed 'Best First'.
Re^2: Accessing list of package names in a module
by FreakyGreenLeaky (Sexton) on Nov 20, 2008 at 10:22 UTC
    Thanks, Module::Info looked ideal, but it doesn't correctly return all the package names from a module (it only returns the last for some reason).

    I'll give the first sample a try now.
      You should report that bug.
        Here is demo for bug
        #!/usr/bin/perl -- package New; $New::VERSION=0; 1; package New::Shhine; $New::Shhine::VERSION=0; 1; package New'Guy'S; $New::Guy::S=0; 1; package New::Grandpa; $New::Grandpa::VERSION=0; 1; package THESE::DON'T::SHOW::UP; package New::Because::There::Is::No::True::Return::Value; package Its::A::Bug; package main; unless( caller ){ # important for package_versions, otherwise fork bom +b use Module::Info; my $mi = Module::Info->new_from_file( __FILE__ ); my @pi = $mi->packages_inside; print $_, $/ for @pi; print "\n----\n"; my %pv = $mi->package_versions; print $_, $/ for %pi; } __END__