Đây là sự kết hợp giữa câu trả lời và đánh giá của Kinopiko.
eval
được sử dụng ở đây để tạo bảng tra cứu theo kiểu được kiểm soát và bảo trì, và bảng tra cứu được sử dụng để lưu tất cả nếu .. elsif .. elsif không quá thú vị để xem.
(rất nhẹ thử nghiệm)
my @stuff = (
{
search => "this",
replace => "that",
modifier => "g",
},
{
search => "ono",
replace => "wendy",
modifier => "i",
}
);
$_ = "this ono boo this\n";
my @modifiers = qw{m s i x g e};
my $s_lookup = {};
foreach my $modifier (@modifiers) {
$s_lookup->{$modifier} = eval " sub { s/\$_[0]/\$_[1]/$modifier } ";
}
for my $h (@stuff) {
$s_lookup->{$h->{modifier}}->($h->{search},$h->{replace});
}
print;
Để được hoàn toàn hữu ích này cần:
- kết hợp các bộ điều chỉnh có thể
- loại chức năng trên bảng tra cứu để 'msi' kết hợp và 'mis 'kết hợp sẽ đi đến cùng một khóa.
Một số công cụ sửa đổi có thể được cung cấp bên trong regex dưới dạng '(? Modifier: pattern)' chứ không phải những thứ có hiệu lực như toàn bộ/g hoặc/e. Đây là một trong những khoảnh khắc "tại sao bạn làm điều đó". Nếu bạn nói với chúng tôi những gì này là cho, chúng tôi có thể có thể đến với một cách đơn giản hơn là đánh răng chống lại lạc đà (và mở một lỗ hổng bảo mật). – Schwern
@Schwern: Và nó khó chịu nhất nếu bạn mở một lỗ trong lạc đà của bạn – Borodin