Уронить perl в core синтаксической ошибкой

Вчера (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 нашли ошибку, правда были нюансы, что она работает не на всех архитектурах и только на очень специфическом синтаксисе, который в реальной жизни не встречается.

Я немного не в

Я немного не в тему, но не могу понять смысл конструкции

if(...) {
   use ...
}

use ведь выполняется на стадии компиляции, так что ему пофигу на if...

Так это для

Так это для "быстро посмотреть" добавил

use Data::Dumper;
print Dumper $foo;

В коде, что уходит в репозиторий, конечно такого нет.

А то что привел выше, что то что осталось после чистке.
Кстати, если даже название модуля Dispatch заменить на другое, то все отрабатывается корректно.