2010-06-01 1 views
12

Я думаю, что столкнулся с ошибкой в ​​Params::Validate, но я не уверен, правильно ли я определил код проблемы. Код, о котором идет речь, не смог пройти исключения по цепочке (используя Try::Tiny), поэтому я начал отладку и выяснил, что класс, используемый в блоке try, имеет деструктор. Этот деструктор вызывает методы объектов, которые используют Params::Validate и смотря на Validate.pmsource Я вижу eval без [email protected], то есть глобальная [email protected] перезаписывается.

Теперь я вижу два варианта:

  1. Params::Validate всегда должны локализовать [email protected] и, таким образом, это ошибка, которую следует сообщать.
  2. Ошибка в соответствующем классе, поскольку он не должен использовать Params::Validate в деструкторе. Params::Validate может остаться, как сейчас.

Кто такой? Как я должен справиться с этой ситуацией?

PS: Я думаю, что модули CPAN должны быть прочными и не сломать себя и окружающую среду, поэтому заголовок вопроса.

ответ

11

См. http://search.cpan.org/perldoc?Params::Validate#SUPPORT о том, как отправить отчет об ошибке. Вы потратили много энергии, обнаружив причину и решение проблемы. Было бы обидно, если бы кто-то еще должен был повторить ваши шаги, не зная, что вы уже узнали.

Я думаю, что модули CPAN должны быть незыблемыми и ни ломать себя, ни их окружение

В идеальном мире, программное обеспечение всегда будет делать то, что он утверждал, что делать, и не имеют какой-либо недокументированные побочное последствия. CPAN - довольно открытая система, поэтому почти все могут загружать практически все. Я думаю, что это скорее особенность, чем ошибка. Низкий барьер для входа облегчает разработку модулей Perl и поощряет разработку более полной и полезной библиотеки.

Params::Validate был выпущен девять лет назад и с тех пор обновлен примерно 94 раза. Если вы просмотрите файл CHANGES, вы увидите, что автор (ы) был довольно добросовестным, чтобы обновлять модуль и фиксировать случайные проблемы, а также добавлять новые функции. Вероятно, это не шокирует их, если вы услышите, что пользователь обнаружил проблему, и вы не должны быть слишком шокированы, чтобы обнаружить, что некоторые из библиотек просто превосходны и не идеальны.

4

Если есть какая-то документация, сообщающая вам, что модуль помогает сохранять ошибки оценки как часть своего API, это абсолютно ошибка.

Я думаю, что модули CPAN должны быть прочными и не разрушаться, ни окружающая среда, следовательно, заголовок вопроса.

Было ли это действительно сломать что-нибудь? Я могу сказать вам, что это ошибка, но я не могу сказать вам, что она оправдывает вас тем, что вы не проверяли случаи, когда вы ожидали ясного [email protected], и не получили ни одного ответа от Params::Validate.Если это «ломает» среду разработки, хорошо, для чего это тестирование.

+0

Точнее, он используется в нашем коде кода, и мой отдел не отвечает за рамки. Итак, да, отсутствие тестирования, но не совсем с моей стороны или коллега, который обнаружил проблему - он проверял свой код и задавался вопросом, почему его исключения не распространяются. –