use warnings;
use strict;
use Data::Dumper;
use PPI;
my $file = 'file.pl';
my $PPI_doc = PPI::Document->new($file);
my $PPI_statements = $PPI_doc->find('PPI::Statement');
my %layout;
my $package;
for my $statement (@$PPI_statements) {
if (ref $statement eq 'PPI::Statement::Package') {
$package = $statement->namespace;
}
if (ref $statement eq 'PPI::Statement::Sub') {
push @{ $layout{$package} }, $statement->name;
}
}
print Dumper \%layout;
####
$VAR1 = {
'Foo' => [
'three',
'four'
],
'Fee' => [
'one'
],
'Fi' => [
'two'
]
};
##
##
my $doc = PPI::Document->new($file);
my $stmts = $doc->find('PPI::Statement');
my %layout;
my @order;
my $package;
for (@$stmts) {
if (ref $_ eq 'PPI::Statement::Package') {
$package = $_->namespace;
push @order, $package;
}
if (ref $_ eq 'PPI::Statement::Sub') {
push @{ $layout{$package} }, $_->name;
}
}
for (@order) {
print "$_:\n";
for (@{ $layout{$_} }) {
print "\t$_\n";
}
}
##
##
Fee:
one
Fi:
two
Foo:
three
four