tôi đang học Perl và nhận thấy một điều không minh bạch khá đặc biệt - cố gắng để phù hợp với một trong nhiều điều kiện regex trong một thời gian lặp kết quả trong vòng lặp mà diễn ra trong vô cực:Perl: Nhiều điều kiện regex toàn cầu "hoặc" được phân tách trong khi khối dẫn đến vòng lặp vô hạn?
#!/usr/bin/perl
my $hivar = "this or that";
while ($hivar =~ m/this/ig || $hivar =~ m/that/ig) {
print "$&\n";
}
Kết quả của chương trình này là:
this
that
that
that
that
[...]
Tôi tự hỏi tại sao điều này? Có bất kỳ cách giải quyết mà ít vụng về hơn thế này:
#!/usr/bin/perl
my $hivar = "this or that";
while ($hivar =~ m/this|that/ig) {
print "$&\n";
}
Đây là một việc đơn giản hóa của một vấn đề thực tế tôi đang gặp phải, và trong khi tôi quan tâm đến điều này trong một quan điểm thực tế, tôi cũng muốn biết những gì đằng sau hậu trường đang kích hoạt hành vi này. Đây là một câu hỏi có vẻ không tương thích với Google.
Cảm ơn!
Tom
Hobbes giải thích nó khá tốt bên dưới, nhưng cũng vậy Wall, Schwartz, et al .: http://perldoc.perl.org/perlretut.html#Global-matching – msw
Bạn có thể muốn xem ở đây để xem liệu Regexp :: Gói lắp ráp có thể giúp bạn: http://stackoverflow.com/questions/1478083/how-can-i-efficiently-match-many-different-regex-patterns-in-perl –