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