OK, here's what I came up with:
package Event; use Moose; use Modern::Perl; my $meta = __PACKAGE__->meta; use overload 'eq' => \&compare; sub compare { no strict 'refs'; my ($event1, $event2) = @_; for my $attr( $meta->get_all_attributes ) { #skip attributes that shouldn't be compared next if $attr eq 'post_id' || $attr eq 'status'; my $type = $attr->type_constraint->name; my $attr_name = $attr->name; if ($type eq 'Str') { return 0 if $event1->$attr_name ne $event2->$attr_name; } if ($type eq 'Int') { return 0 if $event1->$attr_name != $event2->$attr_name; } if ($type eq 'Time::Piece') { no warnings 'uninitialized'; logd('comparing times'); return 0 if $event1->$attr_name != $event2->$attr_name; } } return 1; }
Used like so:
my $event1 = Event->new({location => 'hell'}); my $event2 = Event->new({location => 'hell'}); if ($event1 eq $event2) { say 'equal!'; } else { say 'not equal!'; }
$PM = "Perl Monk's";
$MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate";
$nysus = $PM . ' ' . $MCF;
Click here if you love Perl Monks
In reply to Re: Best way to compare two objects?
by nysus
in thread Best way to compare two objects?
by nysus
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |