Я изучаю Perl и заметил довольно странную причуду - попытка сопоставить одно из нескольких условий регулярного выражения в цикле while приводит к тому, что цикл продолжается бесконечность:
#!/usr/bin/perl
my $hivar = "this or that";
while ($hivar =~ m/this/ig || $hivar =~ m/that/ig) {
print "$&\n";
}
Вывод этогоПрограмма:
this
that
that
that
that
[...]
Мне интересно, почему это так?Существуют ли какие-либо обходные пути, которые являются менее неуклюжими, чем это:
#!/usr/bin/perl
my $hivar = "this or that";
while ($hivar =~ m/this|that/ig) {
print "$&\n";
}
Это упрощение реальной проблемы, с которой я сталкиваюсь, и хотя мне это интересно с практической точки зрения, я такжезнать, что за кадром вызывает такое поведение.Этот вопрос, похоже, не очень совместим с Google.
Спасибо!
Том