|
Perl 6
Using Perl 5 Embedding: Revision 11
Perl 5 embedding is enabled by default in Pugs. This allows to you use some Perl 5 modules from Perl 6. Loading and importing from Perl 5use perl5:CGI; Currently explict imports work, but implicit ones do not. This works: use perl5:Time::gmtime <gmtime>; say gmtime.mday; Object-Oriented ClassesAfter loading a Perl5 OO clas, you can use Perl 6 OO notation to call methods on it. See CGI examples below. Examples of Passing Data to Perl 5Quick Reference
Strings
use perl5:CGI;
my $q = CGI.new('a=Hello');
say $q.param('a');
Hash references
use perl5:CGI;
my $q = CGI.new( { a => "Hello" } );
say $q.param('a');
This works too:
my %h = ( a => "Hello" );
use perl5:CGI;
my $q = CGI.new(\%h);
say $q.param('a');
Hashes and Named Argumentsyour_perl5_func(%perl6_hash.kv)
Note, Perl 6 does not allow named arguments to start with a dash but Perl 5 does. use perl5:CGI; my $q = CGI.new; my $cookie = $q.cookie( %( '-name' => 'Hello', value => 'World' ).kv ); print $cookie; Code referencesYou can even pass a Perl 6 code reference to Perl 5 and pass Perl 5 arguments back into the Perl 6 code ref, and have the resulting thing execute.
sub plus_one (Int $int) { $int+1 }
my $sub = eval('sub { my $p6_coderef = shift; $p6_coderef->(3) }', :lang<perl5>);
my $result = $sub(&plus_one);
print $result; # Correctly prints "4" !
Compiling code as Perl 5That final example showed how to use eval to compile arbitary code as Perl 5, and have a Perl 5 structure returned:
my $perl5_result = eval('some code',:lang<perl5>);
Examples
|