Help language development. Donate to The Perl Foundation
#!/usr/bin/env perl6 use v6; use Test; use Inline::Perl5; plan 21; BEGIN my $p5 = Inline::Perl5.new(); $p5.run(q:heredoc/PERL5/); sub identity { return $_[0] }; PERL5 class Foo { } for ( '', 'abcö', 'äbc'.encode('latin-1'), 24, 2.4.Num, # [1, 2], #TODO - will return as Perl5Array { a => 1, b => 2}, Any, \('foo'), Foo.new, ) -> $obj { is-deeply $p5.call('identity', $obj), $obj, "Can round-trip " ~ $obj.^name; } $p5.run(q/ use utf8; sub check_utf8 { my ($str) = @_; return $str eq 'Töst'; }; sub check_null { my ($str) = @_; return $str eq "foo\0bar"; } /); ok($p5.call('check_utf8', 'Töst'), 'UTF-8 string recognized in Perl 5'); ok($p5.call('check_null', "foo\0bar"), 'Null safe conversion of Str from P6 to P5'); $p5.run(q/ use utf8; use Encode qw(decode); sub check_latin1 { my ($str) = @_; return decode('latin-1', $str) eq 'Töst'; }; /); ok($p5.call('check_latin1', 'Töst'.encode('latin-1')), 'latin-1 works in Perl 5'); $p5.run(q/ sub is_two_point_five { return $_[0] == 2.5; } /); ok($p5.call('is_two_point_five', Num.new(2.5))); $p5.run(q/ sub is_string_ref { my ($ref) = @_; return (ref $ref eq 'SCALAR' and $$ref eq 'foo'); } /); ok($p5.call('is_string_ref', \('foo'))); $p5.run(q/ sub is_hash_ref { my ($ref) = @_; return (ref $ref eq 'HASH' and %$ref == 1 and $ref->{a} == 1); } /); ok($p5.call('is_hash_ref', Map.new((a => 1))), 'Map arrives as a HashRef'); $p5.run(q/ use warnings; sub test_named { my (%params) = @_; return $params{a} + $params{b}; } package P5Foo; sub new { return bless {}; } sub test_named { my ($self, %params) = @_; return $params{a} + $params{b}; } /); is($p5.call('test_named', a => 1, b => 2), 3); is($p5.invoke('P5Foo', 'test_named', a => 1, b => 2), 3); is($p5.invoke('P5Foo', 'new').test_named('a', 1, 'b', 2), 3, 'positional args on object method'); is($p5.invoke('P5Foo', 'new').test_named(a => 1, b => 2), 3, 'named args on object method'); $p5.run(q/ sub test_re { my ($string, $re) = @_; return $string =~ $re; } /); is($p5.call('test_re', 'foo', /o/), 1); is($p5.call('test_re', 'foo', /a/), Nil); $p5.DESTROY; # vim: ft=raku