Skip to content

Instantly share code, notes, and snippets.

Created October 23, 2012 14:28
  • Star 15 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save pdl/3939054 to your computer and use it in GitHub Desktop.
Convert perl scripts to python with the awesome power of regular expressions.
#!perl -w
=head1 NAME
Attempts to convert perl scripts to python with the awesome power of regular expressions.
=head1 BUGS
This will (probably) not actually produce runnable python files. But it saves a lot of work converting some perl to python.
More useful if your perl code is well-indented to start with (consider using a source formatter first).
=head1 AUTHOR
Daniel Perrett C<< >>
my $state;
while (my $sLine = <>)
$sLine =~ tr/$//d;
$sLine =~ s/(?!<\d)\.(?!\d)/+/g;
$sLine =~ s/::/./g;
if ($state->{'pod'})
$sLine =~ s/^=(?!cut)//g;
elsif ($sLine =~ s/^=(?!cut)/"""/)
$state->{'pod'} = 1;
if ($sLine =~ s/^=cut/"""/)
$state->{'pod'} = 0;
$sLine =~ s/^\s*package (.*?);/class $1:/g;
$sLine =~ s/^\s*use /import /g;
$sLine =~ s/^\bundef\b/None/g;
$sLine =~ s/^\beq\b/==/g;
$sLine =~ s/^\bge\b/>=/g;
$sLine =~ s/^\ble\b/=</g;
$sLine =~ s/^\bne\b/!=/g;
$sLine =~ s/^\bgt\b/>/g;
$sLine =~ s/^\blt\b/</g;
$sLine =~ s/^\|\|/or/g;
$sLine =~ s/^&&/and/g;
$sLine =~ s/\s+{(['"])(.*)\1}/.$2/g;
#$sLine =~ s/^\s*sub\s*([\w]+)\s*(?:\(([^)]+)\))\s*\{?/def $1 ($2):/g;
$sLine =~ s/\bsub ([\w]+)(?:\(([^)]+)\))?\s*\{?/def $1:/g;
$sLine =~ s/\bmy ([\w]+)\s*=/$1 =/g;
$sLine =~ s/\bmy ([\w]+);//g;
$sLine =~ s/!/ not /g;
$sLine =~ s/->\{/./g;
$sLine =~ s/->\[/./g;
$sLine =~ s/->/./g;
$sLine =~ s/\{$/:/g;
$sLine =~ s/\}//g;
$sLine =~ s/;$//g;
print STDOUT $sLine;
Copy link

arne-cl commented Jul 16, 2014

Hi Daniel,

this script doesn't seem to handle @array variables, e.g.

for (my $n=0; $n<scalar @$Y; $n++) {
    for (my $m=0; $m<scalar @{$Y->[$n]}; $m++) {
        $allLabels{$Y->[$n][$m]} = 1;

Best regards,

Copy link

nmz787 commented Aug 27, 2014

This isn't in Python! :)

Copy link

Hasimir commented Jan 1, 2016

Brilliant! :)

It doesn't produce working code that I've seen, but it does something far more important; it makes it possible to decipher just wtf some random perl coder from aeons gone by was trying to do, so you can reproduce the end result. Which is what counts.

Copy link

I read this and my nose started to bleed

Copy link

why, why would you do this?

Copy link

I think I just contracted autism

Copy link

What if I tried to convert this script to python... woah.

Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment