Вчера (2009-10-16) при разработке одного из модулей-плагина большой системы
перепутал точку с запятой с двоеточием или просто не успел нажать shift.
Последствия были неожиданные!!!
Perl (v.5.8.8) свалился в корку из-за ошибки синтаксиса!!!
Такое не припомню за лет 9, "игры" с unpack не в счет.
Что под linux, что под freebsd - падал и там и там.
3 часа потратил чтобы минимизировать код, воспроизводящий ошибку.
Вот он.
> find . -type f ./Dispatch.pm ./Foo/D/UserTags.pm > cat Dispatch.pm package Dispatch; sub import { foreach () { eval { require "$_" }; } } 1; > cat Foo/D/UserTags.pm package Foo::D::UserTags; sub get_tags { my ($id_user, $tag_scope) = @_; if ($id_user) { use Data::Dumper: } } 1; > perl -w -MDispatch -e 1 Ошибка сегментации(core dumped)
gdb показал, что падает в Perl_pad_free.
Отправил сообщение об ошибке. Оперативно ответили - оказалось, что в 5.10 уже все нормально.
Сразу вспомнил как давно, давно ловил 2 недели в работающем проекте на сервере ошибку в mysql.
Вот это была веселуха :-(.
Ошибка возникала, как потом выяснилось, из-за ситуации гонки, и появлялась только под серьезной нагрузкой.
Хорошо, что база не билась, просто mysql либо зависал до kill -9 либо падал в корку.
Зато узнал много чего об отладке. :-) или :-(
Ну вот и все на сегодня.
Как говорят, в одно передаче, "а вам слабо" ошибкой синтаксиса повалить perl?!

Молодец! ;)
Вообще нормально - вон в yacc нашли ошибку, правда были нюансы, что она работает не на всех архитектурах и только на очень специфическом синтаксисе, который в реальной жизни не встречается.
Я немного не в
Я немного не в тему, но не могу понять смысл конструкции
use ведь выполняется на стадии компиляции, так что ему пофигу на if...
Так это для
Так это для "быстро посмотреть" добавил
В коде, что уходит в репозиторий, конечно такого нет.
А то что привел выше, что то что осталось после чистке.
Кстати, если даже название модуля Dispatch заменить на другое, то все отрабатывается корректно.