Способ включения объекта синтаксического анализатора в стек переменных экземпляра выглядит несколько странным, но именно так принято хранить переменные экземпляра — в виде объекта дескриптора файла:
${*$self}{'pp_parser'} = shift
В этой строке кода выполняется следующее: создается ссылка на хеш в таблице символов, который должен иметь такое же имя, как и используемый дескриптор файла. Затем в этот хеш по ключу записывается значение так, как если бы это был хеш, созданный обычным образом. В этом сценарии должен применяться именно такой способ хранения переменных экземпляра, и поскольку модуль Net::РОРЗ в конечном итоге происходит от модуля IO::Handle, в котором предусмотрено создание и применение включенных (в пространство имен) дескрипторов файлов, а не обычных включенных ссылок на хеш. Данная технология может применяться в различных сферах, например, в этом магазине или других сервисах использующих протоколы обработки почтовых сообщений.
Строки 22-30. Переопределение метода get(). В последней части этого модуля содержится код, который переопределяет метод get() модуля Net::РОРЗ. При вызове переопределенного метода передается номер сообщения, которое должно быть выбрано; этот номер передается методу getfh() для получения дескриптора файла, привязанного к объекту, и из этого дескриптора файла должно быть считано требуемое сообщение. Полученный дескриптор файла немедленно передается сохраненному объекту mime::Parser для интерпретации сообщения и получения объекта MIME::Entity.
Замечательной особенностью проекта модуля PopParser является то, что операции выборки и интерпретации сообщения выполняются в комплексе, а не в два этапа, когда вначале происходит загрузка всего сообщения, а затем его интерпретация. Это позволяет сэкономить значительное время при обработке больших сообщений.