Perl::ToPerl6 released to CPAN
$ perlmogrify my-script.pl
$ more my-script.pl.pl6
Perl::ToPerl6 is now available on CPAN. This is the final name for the previously-mentioned Perl::Mogrify tool, with the goal of being able to transliterate (not translate, subtle distinction there) working Perl5 code into compilable Perl6.
Please ignore most of the documentation aside from the README file, as this application is heavily cribbed (read: mostly copied) from L
Most of my effort has gone into changing operators because that's not easily done in search-and-replace (Keep in mind '.' -> '~', '=~' -> '~~', '->' -> '.') and whitespace is now significant in more places than you'd suspect based on a casual overview. Basically I'm trying to fix most of the simple stuff that would trip people up if they're porting modules by hand.
Feel free to submit pull requests or issues to Perl-Mogrify on GitHub (haven't changed the module name). I'll keep an eye on the RT trackers, but likely GitHub will be resolved quicker.
I should point out again that it's completely pluggable and extensible, so feel free to add your own modules to the L
It's meant to make just enough changes to ensure your Perl5 code compiles under Perl6. Future modules may help make your Perl6 code more idiomatic, but for the moment focus is on getting existing Perl5 code up and running. I haven't tested the CPAN-released version on a large codebase yet, but the last time I tested it against Parse::RecDescent only 1% of the code required human intervention to get it to compile, and that was mostly refactoring away C
From the README:
As of the initial release, it contains transformers for:
Basic data types (integers, floats, strings)
Binary, Octal and Hexadecimal integer
Floating-point trailing decimal
Here-docs
Interpolated values ("${x}", "$x-foo" etc.)
Interpolated case modifiers ("\lFoo", "\Ufoo\E" etc.)
Builtins
'print $fh "text hee"'
Q types
qw(), qr(), qx()
Conditional constructs ('if', 'elsif', 'unless', 'when')
Looping constructs ('for', 'foreach', 'while', 'until')
Transformation of C-style loops
First-order operators
'map {} @foo', 'grep !2 @a'
Core operators ('->', '.', '<<', '>>', '!' etc.)
Package declarations ('package My::Package;', 'package My::Package {}')
Package usage ('use Foo::Bar')
Pragmas ('utf8', 'warnings', 'overload' etc.)
Dereferencing ('%{ $foo }', '%$foo' etc.)
Hashes ('$foo{a}', "$foo{'a'}" etc.)
Sigils ('$x', '$a[1]', '@a', '%a{a,b}' etc.)
Special variables ('@ARGV', '@+', '%ENV' etc.)
Special literals ('__END__', '__PACKAGE__', '__FILE__' etc.)
Leave a comment