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!