Во время отладки сайта под mod_perl2, столкнулся с воистину мистичным глюком. Мне там потребовались небольшие проверки текущей timezone, ну и манипуляции по-необходимости, использовался пакет DateTime. Сообщение в логе загнало меня в ступор
Invalid version format (non-numeric data) at /usr/local/share/perl/5.10.1/DateTime/TimeZone/Europe/Moscow
BEGIN failed--compilation aborted at /usr/local/share/perl/5.10.1/DateTime/TimeZone/Europe/Moscow.pm line 17.
....
Attempt to reload DateTime/TimeZone/Europe/Moscow.pm aborted.
Справедливости ради, это сообщение не только для Moscow.pm выскакивало. В общем, потребовались глубокие разборки и внимательный просмотр исходных текстов модуля DateTime. Здесь опущу описание душевных мук, в процессе расследования подозрение пало на
Class::Singleton (версия 1.4 от 28 Sep 2007).
Итак, сухой остаток: открывая
исходник, видим в первых рядах следующую строку:
our $VERSION = 1.4;Ищем на своем компе, где модуль прописался (у меня, к примеру, /usr/local/share/perl/5.10.1/Class/Singleton.pm), открываем его в текстовом редакторе, и аналогичную строку заменяем на
our $VERSION = '1.4';т.е. просто заключаем в одинарные кавычки. И (
о, чудо!) - глюк немедленно пропал.
Самое забавное во всей истории - из трех различных серверов, ошибка возникала лишь на одном (который Debian 6 под Xen, если интересно). Вероятно, вследствие набора случайных факторов.
Из этой занимательной истории возникает полезный вывод: всегда заключайте версию модуля в кавычки. Подальше от греха..