1package Overloaded; ##no critic (Modules::RequireFilenameMatchesPackage) 2 3use strict; 4 5sub new { 6 my $class = shift; 7 bless { string => shift, num => shift }, $class; 8} 9 10package Overloaded::Compare; 11 12use strict; 13our @ISA = qw(Overloaded); 14 15# Sometimes objects have only comparison ops overloaded and nothing else. 16# For example, DateTime objects. 17use overload 18 q{eq} => sub { $_[0]->{string} eq $_[1] }, 19 q{==} => sub { $_[0]->{num} == $_[1] }; 20 21package Overloaded::Ify; 22 23use strict; 24our @ISA = qw(Overloaded); 25 26use overload 27 q{""} => sub { $_[0]->{string} }, 28 q{0+} => sub { $_[0]->{num} }; 29 301; 31