Acme::Python - For I<real> python programs


Acme-Python documentation Contained in the Acme-Python distribution.

Index


Code Index:

NAME

Top

Acme::Python - For real python programs

SYNOPSIS

Top

	use Acme::Python;

	print "Hello world\n";




DESCRIPTION

Top

The first time you run a program under use Acme::Python, the module transforms the horrid perl syntax into beautiful python-speak. The code continues to work exactly as it did before, but now it looks like this:

	use Acme::Python;
	Hisssssssssssssssss
	hiss Hiss hiss Hiss hisssssssss Hissss hisss 
	Hiss hisss Hissss hiss Hiss hisss Hiss hiss 
	Hisss hisss Hissss hiss Hisss hissss Hiss 
	hiss Hissss hisssssss Hiss hissss Hiss hissss 
	Hiss hissssss Hiss hisss Hiss hiss Hiss hiss 
	Hiss hisss Hisss hissss Hisss hiss Hisss 
	hissss Hisss hiss Hisss hiss Hisssss hiss 
	Hisss hisssssss Hiss hisss Hissss hiss Hiss 
	hiss Hiss hiss Hisssss hiss Hisss hisss Hiss 
	hisss Hissss hissss Hisss hiss Hisss hissss 
	Hiss hisss Hisss hissss Hissss hiss Hiss 
	hisss Hissss hiss Hisss hisss Hiss hissss 
	Hiss hisss Hisss hiss Hissss hisss




DIAGNOSTICS

Top

Can't python-ise '%s'

Acme::Python could not access the source file to modify it.

Can't execute '%s'

Acme::Python could not access the source file to execute it.

AUTHOR

Top

Copyright (C) 2004-2005, Cal Henderson, <cal@iamcal.com>

SEE ALSO

Top

Acme::Bleach,


Acme-Python documentation Contained in the Acme-Python distribution.

package Acme::Python;

$VERSION = 0.01;

my $signed = "Hisssssssssssssssss";

sub encode {
	local $_ = unpack "b*", pop;
	$_ = join ' ', map{ (/1/?'H':'h').'is'.('s' x length); } m/(0+|1+)/g;
	s/(.{40,}?\s)/$1\n/g;
	"$signed\n$_"
}
sub decode {
	local $_ = pop;
	s/(^$signed|\s)//g;
	s/([hH])is(s+)/ ($1 eq 'H'?'1':'0')x(length $2); /ge;
	pack "b*", $_
}
sub garbled {
	$_[0] =~ /\S/
}
sub signed {
	$_[0] =~ /^$signed/
}

open 0 or print "Can't execute '$0'\n" and exit;

(my $program = join "", <0>) =~ s/.*^\s*use\s+Acme::Python\s*;\n//sm;

local $SIG{__WARN__} = \&garbled;

do {
	eval decode $program; 
	exit
} unless garbled $program && not signed $program;


open 0, ">$0" or print "Can't python-ise '$0'\n" and exit;

print {0} "use Acme::Python;\n", encode $program and exit;

__END__