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 36package Overloaded::Partial; 37 38our @ISA = qw(Overloaded); 39use overload 40 q{""} => sub { $_[0]->{string} }, 41 q{!=} => sub { $_[0]->{num} != $_[1] }; 42 431; 44