package PAR::Filter::Bytecode; use strict; use base 'PAR::Filter'; use File::Temp (); =head1 NAME PAR::Filter::Bytecode - Bytecode filter =head1 SYNOPSIS PAR::Filter::Bytecode->apply(\$code); # transforms $code =head1 DESCRIPTION This filter uses L to turn the script into comment-free, architecture-specific Perl bytecode, and uses L to load back on execution. For L users, please add an extra B<-M> option, like this: pp -f Bytecode -M ByteLoader Otherwise, the implicit dependency on ByteLoader will not be detected. =head1 CAVEATS This backend exhibits all bugs listed in L, and then some. Bytecode support is considered to be extremely fragile on Perl versions earlier than 5.8.1, and is still far from robust (as of this writing). =cut sub apply { my $ref = $_[1]; my ($fh, $in_file) = File::Temp::tempfile(); print $fh $$ref; close $fh; my $out_file = File::Temp::tmpnam(); system($^X, "-MO=Bytecode,-H,-k,-o$out_file", $in_file); unless (-e $out_file) { warn "Cannot transform $in_file to $out_file: $! ($?)\n"; return; } unlink($in_file); open my $fh, '<', $out_file or die $!; local $/; $$ref = <$fh>; close $fh; unlink($out_file); } 1; =head1 SEE ALSO L, L, L =head1 AUTHORS Autrijus Tang Eautrijus@autrijus.orgE L is the official PAR website. You can write to the mailing list at Epar@perl.orgE, or send an empty mail to Epar-subscribe@perl.orgE to participate in the discussion. Please submit bug reports to Ebug-par@rt.cpan.orgE. =head1 COPYRIGHT Copyright 2003, 2004, 2005 by Autrijus Tang Eautrijus@autrijus.orgE. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L =cut