You can avoid the temporary files, as I demonstrated at Coderefs in @INC (was: Building a Simple Perl Module Database). Your approach seems like an awful lot of work though - especially as it will fail to work correctly if any module mucks with @INC too much (such as by unshifting an extra path).
Wouldn't something along the lines of the following work better?
Update: switched from die to croak, used goto to chain to the core require, to make the module more transparent to the outside world.#### untested #### package Test::Without::Module; use constant REQUIRE_ERROR => q/Can't locate %s.pm in @INC (@INC conta +ins: %s)/; my @dont_load_rx; sub import { my $class = shift; push @dont_load_rx, map qr/$_/, @_; } # prototype("CORE::require") eq ";$" *CORE::GLOBAL::require = sub (;$) { local $_ = $_[0]; for my $forbidden (@dont_load) { /$forbidden/ or next; s!::!/!; # possibly OS dependent? require Carp; Carp::croak(sprintf REQUIRE_ERROR, $_, "@INC"); } goto CORE::require; }; 1;
Makeshifts last the longest.
In reply to Re: RFC: Preventing a module from loading
by Aristotle
in thread RFC: Preventing a module from loading
by Corion
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |