package My::Acme::Clutter; use 5.006; sub encrypt { my $return; for ( split(//,shift) ) { $return .= sprintf("%02x",ord($_)); } return $return; } sub decrypt { my $return; for ( $_[0] =~ /.{2}/g ) { $return .= chr( hex $_ ); } return $return; } sub import { my $pkg = shift; my $callpkg = (caller)[0]; my $string = shift; if ($string =~ s/^`//) { $string = decrypt($string); } else { my $clutter = encrypt($string); open 0 or print "Can't clutter '$0'\n"; (my $file = join "", <0>) =~ s{^\s*use\s+My::Acme::Clutter.*?;\n}{use My::Acme::Clutter '`$clutter';}m; open 0, ">$0" or print "Cannot clutter '$0'\n" and exit; print {0} $file and exit; } # turn the string into a hash my %args = eval $string; # finally, do the import; for my $var (keys %args) { ${"${callpkg}::$var"} = $args{$var}; } } 1;