Devel-Examine-Subs
view release on metacpan or search on metacpan
lib/Devel/Examine/Subs/Preprocessor.pm view on Meta::CPAN
sub replace {
trace() if $ENV{TRACE};
return sub {
trace() if $ENV{TRACE};
my $p = shift;
my $exec = $p->{exec};
my $limit = defined $p->{limit} ? $p->{limit} : -1;
my @file = @{ $p->{file_contents} };
if (! $exec || ref $exec ne 'CODE'){
confess "\nDES::replace() requires 'exec => \$cref param\n";
}
my $lines_changed;
for (@file){
my $changed = $exec->($_);
if ($changed){
$lines_changed++;
$limit--;
last if $limit == 0;
}
}
$p->{write_file_contents} = \@file;
return $lines_changed;
}
}
sub remove {
trace() if $ENV{TRACE};
return sub {
trace() if $ENV{TRACE};
my $p = shift;
my @file = @{ $p->{file_contents}};
my $delete = $p->{delete};
for my $find (@$delete){
while (my ($index) = grep { $file[$_] =~ $find } 0..$#file){
splice @file, $index, 1;
}
}
$p->{write_file_contents} = \@file;
}
}
sub _vim_placeholder {1;}
1;
__END__
=head1 NAME
Devel::Examine::Subs::Preprocessor - Provides core pre_proc callbacks for
=for html
<a href="https://github.com/stevieb9/devel-examine-subs/actions"><img src="https://github.com/stevieb9/devel-examine-subs/workflows/CI/badge.svg"/></a>
<a href='https://coveralls.io/github/stevieb9/devel-examine-subs?branch=master'><img src='https://coveralls.io/repos/stevieb9/devel-examine-subs/badge.svg?branch=master&service=github' alt='Coverage Status' /></a>
Devel::Examine::Subs
=head1 SYNOPSIS
use Devel::Examine::Subs::Preprocessor;
my $compiler = Devel::Examine::Subs::Preprocessor->new;
my $pre_proc = 'module';
if (! $compiler->exists($pre_proc)){
confess "pre_proc $pre_proc is not implemented.\n";
}
my $compiled_ok = eval {
$pre_proc_cref = $compiler->{pre_procs}{$pre_proc}->();
1;
};
=head1 DESCRIPTION
Pre-processors run prior to the main processing routine that does the file
reading and subroutine compilations.
Use a pre-processor to manipulate the system early in the call chain, or get
and return data that doesn't require reading any files.
Use C<Devel::Examine::Subs> C<pre_proc_return> parameter to return the data
after the pre-processor has run to avoid unnecessary work by the processor.
=head1 METHODS
All methods other than C<exists()> takes an href of configuration data as its
first parameter.
=head2 C<exists('pre_proc')>
Verifies whether the engine name specified as the string parameter exists and
is valid.
=head2 C<module>
Mandatory parameters: C<{ module =E<gt> 'Module::Name' }>
This pre-processor returns an array reference of all subroutines within the
namespace of the module listed in the C<module> parameter.
The data is returned early as mentioned in the L</DESCRIPTION>.
=head2 C<inject>
Parameters: C<{ inject_use =E<gt> ['use statement1;', 'use statement2;'] }>
or C<{ inject_after_sub_def =E<gt> ['code line 1;', 'code line 2;'] }> or C<{ line_num =E<gt> $num, code => \@code }>
( run in 1.199 second using v1.01-cache-2.11-cpan-5a3173703d6 )