The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
use Test::More 0.88;
{
package T;
use strict;
use warnings;
use lib 't/lib';
my $loader = Module::Implementation::build_loader_sub(
implementations => [ 'Impl1', 'Impl2' ],
symbols => [qw( return_42 &return_package $SCALAR @ARRAY %HASH )],
);
$loader->();
}
{
ok( T->can('return_42'), 'T package has a return_42 sub' );
ok( T->can('return_package'), 'T package has a return_package sub' );
is( T::return_42(), 42, 'T::return_42 work as expected' );
is(
T::return_package(),
'T::Impl1',
'T::return_package returns implementation package'
);
no warnings 'once';
is( $T::SCALAR, 42, '$T::SCALAR was copied from implementation' );
is_deeply(
\@T::ARRAY,
[ 1, 2, 3 ],
'@T::ARRAY was copied from implementation'
);
is_deeply(
\%T::HASH,
{ key => 'val' },
'%T::HASH was copied from implementation'
);
}
done_testing();