#!/usr/bin/env perl use strict; use warnings; sub load_modules { my $mod1 = <<'EOM'; package Test::Module::Hello::Hello; our $VERSION = 0.1; use strict; use warnings; sub go { return "Hi iam ".__PACKAGE__ } 1; __END__ EOM my $mod2 = <<'EOM'; package Test::Module::Hello::Goodbye; our $VERSION = 0.1; use strict; use warnings; # >>> This will kill the eval if uncommented #use Test::Module::Hello::Hello; sub go { return "Hi iam ".__PACKAGE__ } 1; __END__ EOM eval($mod1) or die "$mod1\n\neval failed $@\n"; eval($mod2) or die "$mod2\n\neval failed $@\n"; } load_modules(); my $testscript = ' # >>> Following use/require will kill the eval #use Test::Module::Hello::Hello; require Test::Module::Hello::Goodbye; my $ret = Test::Module::Hello::Hello::go(); print "ret=$ret\n"; $ret = Test::Module::Hello::Goodbye::go(); print "ret=$ret\n"; '; eval($testscript) or die "eval failed, $@";