Move all mro:: XS functions from mro.c to ext/mro/mro.xs, except for
[p5sagit/p5-mst-13.2.git] / lib / overload.pm
index db201fa..425da1b 100644 (file)
@@ -1,8 +1,6 @@
 package overload;
 
-our $VERSION = '1.06';
-
-require Scalar::Util;
+our $VERSION = '1.07';
 
 sub nil {}
 
@@ -75,6 +73,9 @@ sub OverloadedStringify {
 sub Method {
   my $package = shift;
   if(ref $package) {
+    local $@;
+    local $!;
+    require Scalar::Util;
     $package = Scalar::Util::blessed($package);
     return undef if !defined $package;
   }
@@ -88,12 +89,14 @@ sub AddrRef {
   my $package = ref $_[0];
   return "$_[0]" unless $package;
 
-       require Scalar::Util;
-       my $class = Scalar::Util::blessed($_[0]);
-       my $class_prefix = defined($class) ? "$class=" : "";
-       my $type = Scalar::Util::reftype($_[0]);
-       my $addr = Scalar::Util::refaddr($_[0]);
-       return sprintf("$class_prefix$type(0x%x)", $addr);
+  local $@;
+  local $!;
+  require Scalar::Util;
+  my $class = Scalar::Util::blessed($_[0]);
+  my $class_prefix = defined($class) ? "$class=" : "";
+  my $type = Scalar::Util::reftype($_[0]);
+  my $addr = Scalar::Util::refaddr($_[0]);
+  return sprintf("$class_prefix$type(0x%x)", $addr);
 }
 
 *StrVal = *AddrRef;
@@ -101,6 +104,10 @@ sub AddrRef {
 sub mycan {                            # Real can would leave stubs.
   my ($package, $meth) = @_;
 
+  local $@;
+  local $!;
+  require mro;
+
   my $mro = mro::get_linear_isa($package);
   foreach my $p (@$mro) {
     my $fqmeth = $p . q{::} . $meth;
@@ -585,7 +592,8 @@ appear as lvalue when the above code is executed.
 
 If the copy constructor is required during the execution of some mutator,
 but a method for C<'='> was not specified, it can be autogenerated as a
-string copy if the object is a plain scalar.
+string copy if the object is a plain scalar or a simple assignment if it
+is not.
 
 =over 5
 
@@ -672,7 +680,8 @@ C<E<lt>=E<gt>> or C<cmp>:
 =item I<Copy operator>
 
 can be expressed in terms of an assignment to the dereferenced value, if this
-value is a scalar and not a reference.
+value is a scalar and not a reference, or simply a reference assignment
+otherwise.
 
 =back