Нужен ли мне экспортер, если я собираюсь получить чистый OO в Perl? - PullRequest
4 голосов
/ 03 февраля 2009

Документы (Exporter и perlmodlib) говорят:

Как правило, если модуль пытаясь быть объектно-ориентированным тогда ничего не экспортировать.

Но тогда perlmodlib также говорит:

Стандартные, все модули в комплекте Ожидается, что вести себя в четко определенных манера относительно пространства имен загрязнение, потому что они используют Модуль экспортера.

Так что мне интересно, если вы идете в ОО и ничего не экспортируете, вам действительно нужен Экспортер? Если вы этого не сделаете, означает ли это, что ни один из стандартных модулей не является строго ОО в этом смысле, или это означает, что они EXPORT_OK некоторые вещи, потому что вам нужно сделать это, если кто-то хочет наследовать от вашего модуля? (Это правда?) Или вам нужен экспортер, чтобы иметь возможность use MyModule; ... = new MyModule?

1 Ответ

7 голосов
/ 03 февраля 2009

Вы правы. Если все будет называться OBJECT :: sub () или $ obj-> sub (), все будет в порядке.

Для наследования вы захотите использовать @ISA, и для этого вам не нужен экспортер.

Кроме того, вторая цитата, которую вы дали, касается экспортируемых данных, поступающих в модуль.

Если вы используете: use libname (); против библиотеки, которая экспортирует с помощью Exporter, вы гарантированно ничего не экспортируете. Вот как это можно использовать для предотвращения загрязнения пространства имен. Если вы явно экспортируете по имени функции, это единственные функции, которые вы получаете.

...