Кажется, что новая прагма называется parent, которая делает примерно то же самое, что base. Что делает parent, что гарантирует новый (неосновный) модуль? Я что-то упустил?
В чем разница между родителем и базой в Perl 5?
Ответ 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 - принимает параметр, который сообщает ему, что он не умирает, если модуль с тем же именем, что и пакет, не существует