Подтвердить что ты не робот

Является ли `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 должны быть прочными и не сломать себя и свою среду, поэтому заголовок вопроса.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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