[perl #22753] overload::StrVal() fails for regexp refs
Fergal Daly [Sat, 21 Jun 2003 19:02:30 +0000 (19:02 +0000)]
From: "fergal@esatclear.ie (via RT)" <perlbug-followup@perl.org>
Message-ID: <rt-22753-59662.14.6066295633041@rt.perl.org>

p4raw-id: //depot/perl@19840

lib/overload.pm
lib/overload.t

index 81c8598..05a3567 100644 (file)
@@ -84,10 +84,13 @@ sub Method {
 sub AddrRef {
   my $package = ref $_[0];
   return "$_[0]" unless $package;
-  bless $_[0], overload::Fake; # Non-overloaded package
-  my $str = "$_[0]";
-  bless $_[0], $package;       # Back
-  $package . substr $str, index $str, '=';
+
+       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);
 }
 
 sub StrVal {
index 0798a91..0aba79f 100644 (file)
@@ -1085,5 +1085,7 @@ print $a->xet('b') == 42 ? "ok 225\n" : "not ok 225\n";
 print defined eval { $a->{b} } ? "not ok 226\n" : "ok 226\n";
 print $@ =~ /zap/ ? "ok 227\n" : "not ok 227\n";
 
+print overload::StrVal(qr/a/) =~ /^Regexp=SCALAR\(0x[0-9a-f]+\)$/ ? "ok 228\n" : "not ok 228\n";
+
 # Last test is:
-sub last {227}
+sub last {228}