У меня есть функция для поиска в массиве объектов совпадающего значения с помощью оператора eq, например:
sub find {
my ( $self, %params ) = @_;
my @entries = @{ $self->{_entries} };
if ( $params{filename} ) {
@entries = grep { $_->filename eq $params{filename} } @entries;
}
if ( $params{date} ) {
@entries = grep { $_->date eq $params{date} } @entries;
}
if ( $params{title} ) {
@entries = grep { $_->title eq $params{title} } @entries;
}
....
Я также хотел иметь возможность передавать переменную qr в кавычках для использования в сравнении, но единственный способ, которым я могу придумать разделение сравнений, — это использовать блок if/else, например:
if (lc ref($params{whatever}) eq 'regexp') {
#use =~
} else {
#use eq
}
Есть ли более короткий способ сделать это? По не зависящим от меня причинам я использую Perl 5.8.8, поэтому не могу использовать оператор интеллектуального сопоставления.
ТИА