Является ли `eval` в модуле CPAN без локализации [email protected]ошибки?
Я думаю, что я столкнулся с ошибкой в Params::Validate, но я не уверен, правильно ли я определил фрагмент проблемного кода, Код, о котором идет речь, не смог пройти исключения по цепочке (используя Try::Tiny), поэтому я начал отлаживать и обнаружил, что класс, используемый внутри блок try
имеет деструктор. Этот деструктор вызывает методы объекта, которые используют Params::Validate
и просматривают Validate.pm
источник Я вижу локальную eval
без [email protected]
, т.е. глобальный [email protected]
будет перезаписан.
Теперь я вижу два варианта:
-
Params::Validate
должен всегда локализовать [email protected]
и, следовательно, это ошибка, о которой следует сообщить.
- Ошибка находится в соответствующем классе, потому что он не должен использовать
Params::Validate
в деструкторе. Params::Validate
может оставаться таким, как сейчас.
Какая из них? Как я должен справиться с этой ситуацией?
PS: Я думаю, что модули CPAN должны быть прочными и не сломать себя и свою среду, поэтому заголовок вопроса.
Ответы
Ответ 1
См. http://search.cpan.org/perldoc?Params::Validate#SUPPORT для отправки отчета об ошибке. Вы потратили много энергии, обнаружив причину и решение проблемы. Было бы обидно, если бы кто-то еще должен был повторить ваши шаги, не зная, что вы уже узнали.
Я думаю, что модули CPAN должны быть прочными и не сломать себя и свою среду
В идеальном мире программное обеспечение всегда будет делать то, что, по его утверждению, делает, и не имеет никаких недокументированных побочных эффектов. CPAN - довольно открытая система, поэтому почти все могут загружать практически все. Я думаю, что это скорее особенность, чем ошибка. Низкий барьер для входа облегчает разработку модулей Perl и поощряет разработку более полной и полезной библиотеки.
Params::Validate
был выпущен девять лет назад и с тех пор обновлен примерно в 94 раза. Если вы просмотрите файл CHANGES, вы увидите, что автор был довольно добросовестным, чтобы обновлять модуль и фиксировать случайные проблемы, а также добавлять новые функции. Вероятно, это не шокирует их, если вы услышите, что пользователь нашел проблему, и вы не должны быть слишком шокированы, чтобы обнаружить, что некоторые из библиотек просто превосходны и не идеальны.
Ответ 2
Если есть какая-то документация, сообщающая вам, что модуль помогает сохранять значимые ошибки оценки как часть своего API, это абсолютно ошибка.
Я думаю, что модули CPAN должны быть прочными и ни сломать себя, ни окружающую среду, поэтому заголовок вопроса.
Разве это действительно сломало что-нибудь? Я могу сказать вам об этом, но я не могу сказать вам, что он оправдывает вас тем, что не тестировал случаи, когда вы ожидали ясного [email protected]
и не получили благодарности Params::Validate
. Если он "разрывает" среду разработки, хорошо, для чего это тестирование.