lib/I18N/LangTags/List.pm List of tags for human languages
lib/I18N/LangTags/README I18N::LangTags
lib/I18N/LangTags/test.pl See if I18N::LangTags works
+lib/if.pm For "use if"
+lib/if.t Tests for "use if"
lib/importenv.pl Perl routine to get environment into variables
lib/integer.pm For "use integer"
lib/integer.t For "use integer" testing
--- /dev/null
+package if;
+
+our $VERSION = '0.01';
+
+sub work {
+ my $method = shift() ? 'import' : 'unimport';
+ return unless shift; # CONDITION
+ my $p = shift; # PACKAGE
+ eval "require $p" or die; # Adds .pm etc if needed
+ $p->$method(@_) if $p->can($method);
+}
+
+sub import { shift; unshift @_, 1; goto &work }
+sub unimport { shift; unshift @_, 0; goto &work }
+
+1;
+__END__
+
+=head1 NAME
+
+if - C<use> a Perl module if a condition holds
+
+=head1 SYNOPSIS
+
+ use if CONDITION, MODULE => ARGUMENTS;
+
+=head1 DESCRIPTION
+
+The construct
+
+ use if CONDITION, MODULE => ARGUMENTS;
+
+has no effect unless C<CONDITION> is true. In this case the effect is
+the same as of
+
+ use MODULE ARGUMENTS;
+
+=head1 BUGS
+
+The current implementation does not allow specification of the
+required version of the module.
+
+=head1 AUTHOR
+
+Ilya Zakharevich L<mailto:perl-module-if@ilyaz.org>.
+
+=cut
+
--- /dev/null
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+
+use Test::More tests => 4;
+
+my $v_plus = $] + 1;
+my $v_minus = $] - 1;
+
+
+ok( eval "use if ($v_minus > \$]), strict => 'subs'; \${'f'} = 12" eq 12,
+ '"use if" with a false condition, fake pragma');
+
+ok( eval "use if ($v_minus > \$]), strict => 'refs'; \${'f'} = 12" eq 12,
+ '"use if" with a false condition and a pragma');
+
+ok( eval "use if ($v_plus > \$]), strict => 'subs'; \${'f'} = 12" eq 12,
+ '"use if" with a true condition, fake pragma');
+
+ok( (not defined eval "use if ($v_plus > \$]), strict => 'refs'; \${'f'} = 12"
+ and $@ =~ /while "strict refs" in use/),
+ '"use if" with a true condition and a pragma');
+