my ($self, %method_to_filter_value) = @_;
my @filtered_elements = ();
ELEMENT: foreach my $element (@{ $self->listref }) {
keys %method_to_filter_value; # sic! This is to "rewind" the each% operator to the beginning each time
while(my ($filter_name, $filter_value) = each %method_to_filter_value) {
my $actual_value = (ref($element) eq 'HASH') ? $element->{$filter_name} : $element->$filter_name();
next ELEMENT unless( defined($actual_value) # either both defined and equal or neither defined
? defined($filter_value) && ($actual_value eq $filter_value)
: !defined($filter_value)
);
}
push @filtered_elements, $element;
}
return \@filtered_elements;
}