Вопрос
Что выведет следующий код?$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 каналом ;)