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 { 28 @_ == 3 or die "Expected 3 parameters"; 29 $_[0]->{string}; 30 }, 31 q{0+} => sub { 32 @_ == 3 or die "Expected 3 parameters"; 33 $_[0]->{num}; 34 }; 35 361; 37