Acme-VarMess

 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 distribution
 view release on metacpan -  search on metacpan

( run in 1.133 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )