fix for C< use if qw/ 1 open :utf8 / > based on:
Autrijus Tang [Fri, 24 Jan 2003 22:39:06 +0000 (22:39 +0000)]
Subject: [perl #20536] use if 1, open => ':utf8' fails
From: Autrijus Tang (via RT) <perlbug-followup@perl.org>
Message-Id: <rt-20536-49670.13.2464320257255@bugs6.perl.org>

p4raw-id: //depot/perl@18684

lib/if.pm
lib/if.t

index 0795dee..6574d97 100644 (file)
--- a/lib/if.pm
+++ b/lib/if.pm
@@ -1,13 +1,14 @@
 package if;
 
-our $VERSION = '0.02';
+our $VERSION = '0.03';
 
 sub work {
   my $method = shift() ? 'import' : 'unimport';
   return unless shift;         # CONDITION
 
   my $p = $_[0];               # PACKAGE
-  eval "require $p" or die;    # Adds .pm etc if needed
+  (my $file = "$p.pm") =~ s!::!/!g;
+  require $file or die;
 
   my $m = $p->can($method);
   goto &$m if $m;
index 3e75718..61cc4b2 100644 (file)
--- a/lib/if.t
+++ b/lib/if.t
@@ -5,7 +5,7 @@ BEGIN {
     @INC = '../lib';
 }
 
-use Test::More tests => 5;
+use Test::More tests => 6;
 
 my $v_plus = $] + 1;
 my $v_minus = $] - 1;
@@ -27,3 +27,5 @@ ok( (not defined eval "use if ($v_plus > \$]), strict => 'refs'; \${'f'} = 12"
 ok( eval "use if 1, Cwd; cwd() || 1;",
     '"use if" with a true condition, module, no arguments, exports');
 
+ok( eval "use if qw/ 1 if 1 strict subs /; \${'f'} = 12" eq 12,
+    '"use if" with a module named after keyword');