package WarnOver;
use strict;
use warnings;
package UNIVERSAL;
use Scalar::Util 'refaddr';
use Carp;
use overload
q{0+} => sub {
carp "numifying reference " . overload::StrVal($_[0]);
refaddr $_[0];
},
q{""} => sub {
carp "stringifying reference " . overload::StrVal($_[0]);
overload::StrVal($_[0]);
},
fallback => 1;
;
1;
####
use strict;
use warnings;
use lib ".";
use WarnOver;
my $foo = bless {}, "Foo";
$\="\n";
print $foo % 2;
print "$foo";
####
numifying reference Foo=HASH(0x225118) at checkwarn.pl line 10
0
stringifying reference Foo=HASH(0x225118) at checkwarn.pl line 11
Foo=HASH(0x225118)
####
package Foo;
use WarnOver;
$foo = bless {};
$bar = bless {};
print "equal" if $foo == $bar; # two warnings!