--- /dev/null
+#!perl -w
+# See the CAVEATS section in Mouse.pm
+use strict;
+use Test::More;
+
+{
+ package Class;
+ use Mouse;
+
+ has foo => (
+ 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.
+
+ #eval 'use MayNotBeInstalled'; # NG
+ #eval 'BEGIN{ require MayNotBeInstalled }'; # NG
+ eval{ eval 'use MayNotBeInstalled' }; # OK
+ ::pass 'in a default callback';
+ },
+ );
+}
+
+pass "class definition has been done";
+
+isa_ok(Class->new, 'Class');
+
+done_testing;
+
Please unimport Mouse (C<no Mouse>) so that if someone calls one of the
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
+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
+ }
+
+It seems ridiculous, but it works as you expected.
+
=head1 SOURCE CODE ACCESS
We have a public git repository: