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

В чем разница между родителем и базой в Perl 5?

Кажется, что новая прагма называется parent, которая делает примерно то же самое, что base. Что делает parent, что гарантирует новый (неосновный) модуль? Я что-то упустил?

4b9b3361

Ответ 1

base попытался сделать слишком много вещей, автоматически обрабатывая модули загрузки, а также позволяя устанавливать наследование уже загруженных классов (возможно, из файла, имя которого не было основано на имени модуля). Чтобы заставить его работать, в некоторых случаях произошел хакерство, которое вызвало неожиданные результаты. Вместо того, чтобы отменить обратную совместимость, появилась новая, прагма замены parent с более чистой семантикой.

parent будет основным модулем по 5.10.1.

Обновление: забыл, что base обрабатывает fields (если вы используете прагму fields), которую parent не делает.

Ответ 2

Вооружившись дополнительным битом информации из ysth, я смог увидеть различия в документах:

base pragma выполняет следующие действия:

  • добавляет именованный пакет в @ISA
  • загружает модуль с тем же именем, что и именованный пакет, используя require (если он не обнаружит, что пакет уже загружен)
  • не будет работать, если модуль с тем же именем, что и пакет, не существует
  • умирает, если в именованном пакете нет символов
  • Если $VERSION не существует в именованном пакете, база устанавливает его в "-1, set by base.pm"
  • инициализирует fields именованного пакета, если они существуют
  • не вызывает функцию импорта именованного пакета

parent pragma выполняет следующие действия:

  • добавляет именованный пакет в @ISA
  • загружает модуль с тем же именем, что и именованный пакет, используя require
  • принимает параметр, который сообщает ему, что он не умирает, если модуль с тем же именем, что и пакет, не существует