Показаны сообщения с ярлыком Tests. Показать все сообщения
Показаны сообщения с ярлыком Tests. Показать все сообщения

пятница, 1 июля 2011 г.

Тест на понимание Perl: Вопрос 5

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

четверг, 21 октября 2010 г.

Тестирование в Perl: Завершение теста при первой ошибке

Для меня стала открытием вот эта функция - Test::Most::bail_on_fail :)

Вкратце объясню зачем оно нужно.
В обычном режиме прогоняется все тесты, а затем выводится отчет. И потом приходится искать в логах нужное место для выяснения причин ошибок.

Если вы добавите в начало теста вызов Test::Most::bail_on_fail, то при первой же неудаче тест остановится. Теперь нас интересуют лишь последние сообщения в лог файле ;)