$| = 1;
BEGIN { require './test.pl' }
-plan tests => 5184;
+plan tests => 5191;
use Scalar::Util qw(tainted);
is(ref $a, "Oscalar");
is($copies, 1);
-eval q[package Oscalar; use overload ('+=' => sub {$ {$_[0]} += 3*"$_[1]";
+eval q[package Oscalar; use overload ('+=' => sub {$ {$_[0]} += 3*$_[1];
$_[0] } ) ];
$c=new Oscalar; # Cause rehash
is($obj->val, 7, "correct result (add incr void)");
}
+# [perl #113010]
+{
+ {
+ package OnlyFallback;
+ use overload fallback => 0;
+ }
+ {
+ my $obj = bless {}, 'OnlyFallback';
+ my $died = !eval { "".$obj; 1 };
+ my $err = $@;
+ ok($died, "fallback of 0 causes error");
+ like($err, qr/"\.": no method found/, "correct error");
+ }
+
+ {
+ package OnlyFallbackUndef;
+ use overload fallback => undef;
+ }
+ {
+ my $obj = bless {}, 'OnlyFallbackUndef';
+ my $died = !eval { "".$obj; 1 };
+ my $err = $@;
+ ok($died, "fallback of undef causes error");
+ # this one tries falling back to stringify before dying
+ like($err, qr/"""": no method found/, "correct error");
+ }
+
+ {
+ package OnlyFallbackTrue;
+ use overload fallback => 1;
+ }
+ {
+ my $obj = bless {}, 'OnlyFallbackTrue';
+ my $val;
+ my $died = !eval { $val = "".$obj; 1 };
+ my $err = $@;
+ ok(!$died, "fallback of 1 doesn't cause error")
+ || diag("got error of $err");
+ like($val, qr/^OnlyFallbackTrue=HASH\(/, "stringified correctly");
+ }
+}
+
+{
+ # Making Regexp class overloaded: avoid infinite recursion.
+ # Do this in a separate process since it, well, overloads Regexp!
+ fresh_perl_is(
+ <<'EOF',
+package Regexp;
+use overload q{""} => sub {$_[0] };
+package main;
+my $r1 = qr/1/;
+my $r2 = qr/ABC$r1/;
+print $r2,"\n";
+EOF
+ '(?^:ABC(?^:1))',
+ { stderr => 1 },
+ 'overloaded REGEXP'
+ );
+}
{ # undefining the overload stash -- KEEP THIS TEST LAST
package ant;