use Devel::Examine::Subs;
my $dir = '/home/steve/devel/repos/project';
my $des = Devel::Examine::Subs->new({
file => $dir,
regex => 1,
});
####
$des->search_replace({
exclude => ['one', 'three'],
search => '(\W)template.tpl(\W)',
replace => 'new_template.tpl',
extensions => ['pm'],
});
####
my @code = ;
$des->inject_after({
search => '\$self\s+=\s+shift',
code => \@code,
});
__DATA__
$self->{thing} = some_function();
my $debug = 1 if $self->{thing};
if ($debug){
print Dumper $self;
exit;
}
####
my $des = Devel::Examine::Subs->new({
file => 'file.pm',
cache => 1,
});
####
my $objects_aref = $des->objects();
####
for my $sub (@$objects_aref){
say "name: " . $sub->name;
say "first line num: " . $sub->start;
say "last line num: " . $sub->end;
say "line count: " . $sub->line_count;
say "sub code: ";
say "\t$_" for @{$sub->code};
print "\n";
if ($sub->lines->[0]){
say "Lines that match: ";
for my $line (@{$sub->lines}){
say "\t$line";
}
print "\n";
}
}
####
# dir search returns an href. key is the filename of
# the file the subs were found in, and the values are the
# same return you'd get from the same call on an individual
# file
my $files = $des->objects();
for my $file (keys %$files){
for my $sub (@{$files->{$file}}){
say $sub->name;
...
}
}
####
my $aref = $des->all();
####
my $aref = $des->has({search => 'this'});
my $aref = $des->missing({search => 'this'});
####
my $files = $des->all({file => 'dir'});
for my $file (keys %$files){
say $file;
for my $sub (@{$files->{$file}}){
say "\t$sub";
}
print "\n";
}