package MooselessRequireHookTest;
use 5.032;
use warnings;
sub new {
my ($class) = @_;
return bless {} => $class;
}
sub dynamic_require {
my ($self, $ns_extension) = @_;
state $hook_source = {};
state $inc_updated = 0;
my $class = join '::', __PACKAGE__, $ns_extension;
my $filename_key = $class =~ s{::}{/}gr . '.pm';
unless (exists $hook_source->{$filename_key}) {
my $source = <<~EOF;
package $class;
use parent 'MooselessRequireHookTest';
1;
EOF
$hook_source->{$filename_key} = \$source;
}
state sub inc_hook {
my ($coderef, $filename) = @_;
warn "\$coderef[$coderef] \$filename[$filename]\n";
return $hook_source->{$filename};
};
unless ($inc_updated) {
push @INC, \&inc_hook;
$inc_updated = 1;
}
eval "require $class;";
return;
}
1;
####
warn '-' x 10, ' @INC ', '-' x 10, "\n";
warn "$_\n" for @INC;
warn '-' x 26, "\n";
####
$ prove -v sscce_mooseless_require_hook_test.t
sscce_mooseless_require_hook_test.t ..
1..8
ok 1 - Test MooselessRequireHookTest::->new()
ok 2 - 'Test MooselessRequireHookTest::->new() ISA' isa 'MooselessRequireHookTest'
ok 3 - Test MooselessRequireHookTest::Test1->new()
ok 4 - 'Test MooselessRequireHookTest::Test1->new() ISA' isa 'MooselessRequireHookTest::Test1'
ok 5 - Test MooselessRequireHookTest::Test2->new()
ok 6 - 'Test MooselessRequireHookTest::Test2->new() ISA' isa 'MooselessRequireHookTest::Test2'
ok 7 - Test MooselessRequireHookTest::A::B::C->new()
ok 8 - 'Test MooselessRequireHookTest::A::B::C->new() ISA' isa 'MooselessRequireHookTest::A::B::C'
$coderef[CODE(0x600867f00)] $filename[MooselessRequireHookTest/Test1.pm]
$coderef[CODE(0x600867f00)] $filename[MooselessRequireHookTest/Test2.pm]
$coderef[CODE(0x600867f00)] $filename[MooselessRequireHookTest/A/B/C.pm]
---------- @INC ----------
/home/ken/tmp/pm_sscce_require_hook/lib
/home/ken/perl5/perlbrew/perls/perl-5.32.0/lib/site_perl/5.32.0/cygwin-thread-multi
/home/ken/perl5/perlbrew/perls/perl-5.32.0/lib/site_perl/5.32.0
/home/ken/perl5/perlbrew/perls/perl-5.32.0/lib/5.32.0/cygwin-thread-multi
/home/ken/perl5/perlbrew/perls/perl-5.32.0/lib/5.32.0
CODE(0x600867f00)
--------------------------
ok
All tests successful.
Files=1, Tests=8, 0 wallclock secs ( 0.02 usr 0.01 sys + 0.08 cusr 0.05 csys = 0.15 CPU)
Result: PASS