in reply to Re^2: Controlling "use" statements
in thread Controlling "use" statements

That's right.  If you desperately needed that functionality, you could patch if.pm as shown below. (In case you'd rather not mess with the system version, just create a copy in some local lib directory and make that directory be searched before the system ones.)

You could then for example write

use if $DEBUG, 'Data::Dumper' => undef;

to import nothing, just like with

use Data::Dumper ();

As the module is actually rather short, here is the full code:

package if; sub work { my $method = shift() ? 'import' : 'unimport'; die "Too few arguments to `use if' (some code returning an empty lis +t in list context?)" unless @_ >= 2; return unless shift; # CONDITION my $p = $_[0]; # PACKAGE (my $file = "$p.pm") =~ s!::!/!g; require $file; # Works even if $_[0] is a keyword (like open) return if @_==2 && !defined $_[1]; # <--- ADDED my $m = $p->can($method); goto &$m if $m; } sub import { shift; unshift @_, 1; goto &work } sub unimport { shift; unshift @_, 0; goto &work } 1;

When being passed undef, the line marked with "<--- ADDED" would make the sub return before executing the real import() of the target module via goto &$m (where $m is referring to import in this case).

(Not well tested! &mdash use at your own risk...)