Вопрос
Что выведет следующий код?$MODE = 'debug';
sub is_debug { $MODE =~ /debug/gi ? 1:0 }
print 5 if is_debug();
print 6 if is_debug();
print 7 if is_debug();
Ответ: 57Пояснение
Вызов функции is_debug будет нам по очереди возвращать то 1, то 0. Это связано с тем, что мы используем регексп с модификатором "g" в скалярном контексте. В такой ситуации при удачном совпадении Perl запоминает позицию на которой остановился и в следующий раз продолжает поиск с нее.Нужно такое поведение, для таких вот ситуаций:
$x = "cat dog house";
while ($x =~ /(\w+)/g) {
print "Word is $1, ends at position ", pos $x, "\n";
}
Детали в perldoc perlretut

1 коммент.:
Спасибо.
Про флаг g и скалярный контекст знал, но не знал, что оператор =~ зацикливается.
Отправить комментарий
Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)