1b39c5158Smillertpackage Overloaded; ##no critic (Modules::RequireFilenameMatchesPackage) 2b39c5158Smillert 3b39c5158Smillertuse strict; 4b39c5158Smillert 5b39c5158Smillertsub new { 6b39c5158Smillert my $class = shift; 7b39c5158Smillert bless { string => shift, num => shift }, $class; 8b39c5158Smillert} 9b39c5158Smillert 10b39c5158Smillertpackage Overloaded::Compare; 11b39c5158Smillert 12b39c5158Smillertuse strict; 13b39c5158Smillertour @ISA = qw(Overloaded); 14b39c5158Smillert 15b39c5158Smillert# Sometimes objects have only comparison ops overloaded and nothing else. 16b39c5158Smillert# For example, DateTime objects. 17b39c5158Smillertuse overload 18b39c5158Smillert q{eq} => sub { $_[0]->{string} eq $_[1] }, 19b39c5158Smillert q{==} => sub { $_[0]->{num} == $_[1] }; 20b39c5158Smillert 21b39c5158Smillertpackage Overloaded::Ify; 22b39c5158Smillert 23b39c5158Smillertuse strict; 24b39c5158Smillertour @ISA = qw(Overloaded); 25b39c5158Smillert 26b39c5158Smillertuse overload 27256a93a4Safresh1 q{""} => sub { 28256a93a4Safresh1 @_ == 3 or die "Expected 3 parameters"; 29256a93a4Safresh1 $_[0]->{string}; 30256a93a4Safresh1 }, 31256a93a4Safresh1 q{0+} => sub { 32256a93a4Safresh1 @_ == 3 or die "Expected 3 parameters"; 33256a93a4Safresh1 $_[0]->{num}; 34256a93a4Safresh1 }; 35b39c5158Smillert 36*f2a19305Safresh1package Overloaded::Partial; 37*f2a19305Safresh1 38*f2a19305Safresh1our @ISA = qw(Overloaded); 39*f2a19305Safresh1use overload 40*f2a19305Safresh1 q{""} => sub { $_[0]->{string} }, 41*f2a19305Safresh1 q{!=} => sub { $_[0]->{num} != $_[1] }; 42*f2a19305Safresh1 43b39c5158Smillert1; 44