in reply to RFC: Preventing a module from loading
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: RFC: Preventing a module from loading
by Corion (Patriarch) on Feb 18, 2003 at 21:14 UTC | |
by Aristotle (Chancellor) on Feb 18, 2003 at 21:26 UTC |