Acme-VarMess
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Acme/VarMess.pm view on Meta::CPAN
package Acme::VarMess;
use strict;
use PPI;
use Data::Dumper;
use List::Util qw(shuffle);
use Digest::MD5 qw(md5_hex);
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(blow);
our $VERSION = 0.01;
our $DEBUG = 0;
my %symtable;
my @symbol = map{('a'..'z','A'..'Z','_')
[int(rand(53))].(time).md5_hex($_)} shuffle 1..65536;
my %invar = map{$_=>1} qw(
VERSION
EXPORT
EXPORT_OK
),0..9,split//,q(ab`!@#$%^&*()+-={};':",./<>?|\\[]);
sub dont_blow {
%invar = map{$_=>1} @_;
}
sub blow($$;$) {
my ($src, $outputfile) = @_;
my $doc;
if(ref $src){
$doc = PPI::Document->new($$src);
}
else {
$doc = PPI::Document->load($src);
}
#print Dumper
grep{$_->{content}
=~
s[^(.)(.+)$] # process simple symbol names
[$invar{$2} ?
$1.$2 : (
exists($symtable{$2}) ?
$1.$symtable{$2} :
$1.($symtable{$2} = shift @symbol)) ]e;
$_}
grep{
$_->{content} =~
s[^(.+::)(.+)$] # process symbols with full package name
[$invar{$2} ?
$1.$symtable{$2} :
$1.($symtable{$2} = shift @symbol)]e;
$_}
grep{$_ and !$_->isa('PPI::Token::Magic') }
@{$doc->find('PPI::Token::Symbol')};
print Dumper \%symtable if $DEBUG;
$doc->prune('PPI::Token::Pod');
$doc->prune('PPI::Token::Comment');
for (@{$doc->find('PPI::Token::Whitespace')}){
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.133 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )