<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">package if;

$VERSION = '0.0602';

sub work {
  my $method = shift() ? 'import' : 'unimport';
  die "Too few arguments to 'use if' (some code returning an empty list in list context?)"
    unless @_ &gt;= 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)
  my $m = $p-&gt;can($method);
  goto &amp;$m if $m;
}

sub import   { shift; unshift @_, 1; goto &amp;work }
sub unimport { shift; unshift @_, 0; goto &amp;work }

1;
__END__

=head1 NAME

if - C&lt;use&gt; a Perl module if a condition holds

=head1 SYNOPSIS

  use if CONDITION, MODULE =&gt; ARGUMENTS;

=head1 DESCRIPTION

The construct

  use if CONDITION, MODULE =&gt; ARGUMENTS;

has no effect unless C&lt;CONDITION&gt; is true.  In this case the effect is
the same as of

  use MODULE ARGUMENTS;

Above C&lt;&lt; =&gt; &gt;&gt; provides necessary quoting of C&lt;MODULE&gt;.  If not used (e.g.,
no ARGUMENTS to give), you'd better quote C&lt;MODULE&gt; yourselves.

=head1 BUGS

The current implementation does not allow specification of the
required version of the module.

=head1 AUTHOR

Ilya Zakharevich L&lt;mailto:ilyaz@cpan.org&gt;.

=cut

</pre></body></html>