sub dynamic_require { my ($self, $ns_extension) = @_; my $class = join '::', __PACKAGE__, $ns_extension; my $source = <<~EOF; package $class; use parent 'MooselessRequireHookTest'; 1; EOF push @INC, sub { my ($coderef, $filename) = @_; my $wanted_filename = $class =~ s{::}{/}gr . '.pm'; return unless $filename eq $wanted_filename; return \$source; }; eval "require $class;"; return; } #### $rht->dynamic_require('A::B::C'); my $rht_abc = MooselessRequireHookTest::A::B::C->new(); is(defined $rht_abc, 1, 'Test MooselessRequireHookTest::A::B::C->new()'); isa_ok($rht_abc, 'MooselessRequireHookTest::A::B::C', 'Test MooselessRequireHookTest::A::B::C->new() ISA'); #### warn "\$coderef[$coderef] \$filename[$filename]\n"; #### 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(0x60008aa00)] $filename[MooselessRequireHookTest/Test1.pm] $coderef[CODE(0x60008aa00)] $filename[MooselessRequireHookTest/Test2.pm] $coderef[CODE(0x600868c78)] $filename[MooselessRequireHookTest/Test2.pm] $coderef[CODE(0x60008aa00)] $filename[MooselessRequireHookTest/A/B/C.pm] $coderef[CODE(0x600868c78)] $filename[MooselessRequireHookTest/A/B/C.pm] $coderef[CODE(0x60086da88)] $filename[MooselessRequireHookTest/A/B/C.pm] ok All tests successful. Files=1, Tests=8, 0 wallclock secs ( 0.00 usr 0.03 sys + 0.08 cusr 0.03 csys = 0.14 CPU) Result: PASS #### /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(0x60008aa00) CODE(0x600868c78) CODE(0x60086da88)