ฉันมีฟังก์ชันในการค้นหาอาร์เรย์ของออบเจ็กต์เพื่อหาค่าที่ตรงกันโดยใช้ตัวดำเนินการ 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 ดังนั้นฉันจึงไม่สามารถใช้ตัวดำเนินการจับคู่อัจฉริยะได้
ทีไอเอ