Какая разница между пространством имен, пакетом и модулем в perl?

Пространство имен или пакет одинаковы? Я использую Perl, где у нас есть только пакеты. Я знаю, что есть другие языки программирования, которые также включают в себя модули.

Какая разница?

Ответ 1

Namespace - общий вычислительный термин, означающий контейнер для отдельного набора идентификаторов. Один и тот же идентификатор может отображаться независимо в разных пространствах имен и ссылаться на разные объекты, а полнофункциональный идентификатор, который однозначно идентифицирует объект, состоит из пространства имен плюс идентификатор.

Perl реализует пространства имен, используя package.

Модуль Perl совсем другой. Это часть кода Perl, которая может быть включена в любую программу с ключевым словом use. Имя файла должно заканчиваться на .pm - для P erl M odule - и содержащийся в нем код должен иметь оператор package, используя имя пакета, которое эквивалентно имя файла, включая его путь. Например, модуль, написанный в файле с именем My/Useful/Module.pm, должен иметь оператор package, например package My::Useful::Module.

То, о чем вы, возможно, и думали, является классом, который, опять же, является общим вычислительным термином, на этот раз подразумевает тип объектно-ориентированных данных. Perl использует свои пакеты как имена классов, а объектно-ориентированный модуль будет иметь подпрограмму конструктора - обычно называемую new -, которая вернет ссылку на данные, которые были blessed, чтобы заставить его вести себя объектно-ориентированным способом. Ни в коем случае все модули Perl являются объектно-ориентированными: некоторые могут быть простыми библиотеками подпрограмм.

Ответ 2

Директива package устанавливает пространство имен. Таким образом, пространство имен также называется пакетом.

Perl не имеет формального определения модуля. Там много различий, но для огромного большинства модулей выполняется следующее:

  • Файл с расширением .pm.
  • Файл содержит одно объявление package, которое охватывает весь код. (Но см. Ниже.)
  • Файл назван на основе пространства имен, названного этим package.
  • Ожидается, что файл будет возвращать истинное значение при его выполнении.
  • Ожидается, что файл будет выполнен не более одного раза на каждого интерпретатора.

Не редко встречаются файлы .pm с несколькими пакетами. Независимо от того, что для обсуждения обсуждается один модуль, несколько модулей или оба.