Perl6-Pugs
view release on metacpan or search on metacpan
perl5/Pugs-Compiler-Perl6/old/v6.pm view on Meta::CPAN
package v6;
# invokes the Perl6-to-Perl5 compiler and creates a .pmc file
use strict;
use warnings;
my $filename = (caller)[1];
my $pmc = $filename;
$pmc =~ s/\.(pl|pm|t)$/\.pmc/;
die "this is not a .pl, .t or .pm file"
unless $pmc =~ /\.pmc/;
# test file dates
my $pmc_is_uptodate = (-s $pmc and (-M $pmc <= -M $filename));
# print "up to date: $pmc_is_uptodate\n";
if ( $pmc_is_uptodate ) {
do $pmc
unless $filename =~ /\.pm$/;
exit 0;
# return 1;
}
my $p6;
# delay use'ing until we need it
eval
q(
use FindBin '$Bin';
use lib
"$Bin/lib",
"$Bin/../Pugs-Compiler-Rule/lib",
"$Bin/../Pugs-Utils/lib",
#"$Bin/../Pugs-Compiler-Precedence/lib",
"$Bin/../lib",
"$Bin/../../Pugs-Compiler-Rule/lib",
"$Bin/../../Pugs-Utils/lib",
#"$Bin/../../Pugs-Compiler-Precedence/lib",
;
use Pugs::Compiler::Perl6;
use Data::Dumper;
# print "P6 loaded from '$filename'\n";
open FILE, "<", $filename
or die "can't open $filename for compilation";
my @a=<FILE>;
close FILE;
my $src = join('', @a);
$p6 = Pugs::Compiler::Perl6->compile( $src );
#use YAML;
#print Dump $match->();
#print dump_tree $p6;
#print Dumper $p6;
# print "tail: ", substr( ${$match}->{tail}, 0, 20 ),"...\n";
#print "P5: ",$p6->{perl5}, "\n";
open FILE, ">", $pmc
or die "can't open $pmc for writing";
print FILE $p6->{perl5}, "\n";
# print "created .pmc file: $^X $pmc \n";
);
warn "compilation error: ", $@ if $@;
eval $p6->{perl5}
unless $filename =~ /\.pm$/;
exit 0;
( run in 2.504 seconds using v1.01-cache-2.11-cpan-8dfa8b56332 )