Почему "use namespace:: autoclean" предпочитает "no Moose"?

Часто замечаемая рекомендация по лучшим методам в отношении Moose заключается в следующем:

"Бит использования namespace::autoclean - это просто хорошая гигиена кода, поскольку он удаляет импортированные символы из пространства имен классов в конце цикла компиляции пакета, включая ключевые слова Moose. После того, как класс был создан, эти ключевые слова не требуется. (Это предпочтительнее разместить no Moose в конце вашего пакета)."

Взято для Moose::Manual::BestPractices (внимание мое).

Я понимаю все, что касается цитаты выше, кроме одного: почему использование namespace::autoclean предпочтительнее использования no Moose в конце лексической области?

Это просто потому, что namespace::autoclean более универсален, что позволяет использовать больше опций в его использовании или есть что-то неотъемлемое для того, как оно было реализовано (возможно, специально для классов Moose), что делает его более надежным?

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

Ответы

Ответ 1

no Moose избавляется только от тех функций, которые импортируются с помощью use Moose. use namespace::autoclean избавляется от всех импортированных функций.

Если вы всегда используете namespace::autoclean, вам не нужно забывать переключать no Moose на use namespace::autoclean, если вы позже вернетесь и импортируете функцию из некоторого модуля. В противном случае вы можете забыть это сделать.