Clearify the issue on RT#69939
gfx [Fri, 15 Jan 2010 05:39:22 +0000 (14:39 +0900)]
caveats/RT69939.t
lib/Mouse.pm

index d6bb172..c13fb69 100644 (file)
@@ -11,13 +11,11 @@ use Test::More;
         is  => 'rw',
 
         default => sub{
-            # Those eval()s which try to load missing modules in
-            # compile-time triggers a Perl bug (Ticket #69939).
-            # This is related not only to Mouse, but also to tie-modules.
+            # Ticket #69939
+            # See the Mouse manpage
 
-            #eval 'use MayNotBeInstalled';              # NG
-            #eval 'BEGIN{ require MayNotBeInstalled }'; # NG
-            eval{ eval 'use MayNotBeInstalled' };       # OK
+            #eval       'BEGIN{ die }';   # NG
+            eval{ eval 'BEGIN{ die }' }; # OK
             ::pass 'in a default callback';
         },
     );
index 279d58c..b8b4565 100644 (file)
@@ -404,15 +404,16 @@ keywords (such as L</extends>) it will break loudly instead breaking subtly.
 
 =head1 CAVEATS
 
-If you use Mouse::XS you might see a silent fatal error when you use
-callbacks which include C<eval 'use MayNotBeInstalled'>. This is not
+If you use Mouse::XS you might see a fatal error on callbacks
+which include C<eval 'BEGIN{ die }'>, which typically occurs in sutch code
+like C<eval 'use NotInstalledModule'>. This is not
 a bug in Mouse. In fact, it is a bug in Perl (RT #69939).
 
 To work around this problem, surround C<eval STRING> with C<eval BLOCK>:
 
     sub callback {
-        # eval 'use MayNotBeInstalled';       # NG
-        eval{ eval 'use MayNotBeInstalled' }; # OK
+        # eval 'use NotInstalledModule';       # NG
+        eval{ eval 'use NotInstalledModule' }; # OK
     }
 
 It seems ridiculous, but it works as you expected.