CodeGen-Protection
view release on metacpan or search on metacpan
lib/CodeGen/Protection/Format/Perl.pm view on Meta::CPAN
package CodeGen::Protection::Format::Perl;
# ABSTRACT: Safely rewrite parts of Perl documents
use Moo;
use Carp 'croak';
with qw(CodeGen::Protection::Role);
our $VERSION = '0.06';
sub _tidy {
my ( $self, $code ) = @_;
return $code unless my $perltidy = $self->tidy;
require Perl::Tidy;
my @perltidy;
if ( '1' ne $perltidy ) {
unless ( -e $perltidy ) {
croak("Cannot find perltidyrc file: $perltidy");
}
@perltidy = ( perltidyrc => $perltidy );
}
my ( $stderr, $tidied );
# need to clear @ARGV or else Perl::Tidy thinks you're trying
# to provide a filename and dies
local @ARGV;
Perl::Tidy::perltidy(
source => \$code,
destination => \$tidied,
stderr => \$stderr,
@perltidy,
) and die "Perl::Tidy error: $stderr";
return $tidied;
}
# For both the _start_marker_format() and the _end_marker_format(), the first
# '%s' is the version number if it's being added to the document. It's a
# version regex (_version_re()) if it's being used to match the start or end
# marker.
# The second '%s' is the md5 sum if it's being added to the document. It's a
# captured md5 regex ([0-9a-f]{32}) if it's being used to match the start or
# end marker.
sub _start_marker_format {
'#<<< %s %s. Do not touch any code between this and the end comment. Checksum: %s';
}
sub _end_marker_format {
'#>>> %s %s. Do not touch any code between this and the start comment. Checksum: %s';
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
CodeGen::Protection::Format::Perl - Safely rewrite parts of Perl documents
=head1 VERSION
version 0.06
=head1 SYNOPSIS
my $rewrite = CodeGen::Protection::Format::Perl->new(
protected_code => $text,
);
say $rewrite->rewritten;
my $rewrite = CodeGen::Protection::Format::Perl->new(
existing_code => $existing_code,
protected_code => $protected_code,
);
say $rewrite->rewritten;
=head1 DESCRIPTION
This module allows you to do a safe partial rewrite of documents. If you're
familiar with L<DBIx::Class::Schema::Loader>, you probably know the basic
( run in 0.936 second using v1.01-cache-2.11-cpan-39bf76dae61 )