Почему 1 в конце каждого пакета perl? - PullRequest
33 голосов
/ 14 марта 2011

Если вы забыли 1 в конце пакета, Perl скажет вам: «Пакет не вернул истинное значение».Ну, если он знает, что ты забыл его, почему бы просто не поставить его там для тебя?

Ответы [ 4 ]

38 голосов
/ 14 марта 2011

Поскольку модули Perl должны возвращать значение для сигнала, если директива require должна быть успешной (возвращено истинное значение) или не выполнена (возвращено ложное значение; это может иметь смысл, если модуль по какой-то причине не смог инициализироваться).

Если вы ничего не возвращаете, переводчик не может знать, должен ли require быть успешным или неуспешным;в то же время, поскольку легко забыть поместить истинное значение в конец пакета, он предлагает «общее исправление» для этой ошибки: добавьте истинное значение в качестве возврата.

Для некоторых другихИнформация / фольклор о возвращаемом значении модулей смотрите на этот вопрос .

5 голосов
/ 14 марта 2011

Пакет может вернуть ложное значение, если не удается инициализировать, например, если он не может найти требуемый файл данных или внешнюю библиотеку. Таким образом, он завершается с ошибкой во время загрузки (и этот сбой может даже быть проверен), а не непредсказуемо позже.

4 голосов
/ 14 марта 2011

Из википедии Perl-модуль :

   A Perl module must end with a true value or else it is considered not to
   have loaded.  By convention this value is usually 1 though it can be
   any true value.  A module can end with false to indicate failure but
   this is rarely used and it would instead die() (exit with an error).
3 голосов
/ 14 марта 2011

1;

Когда модуль загружен (при использовании) компилятор будет жаловаться, если последний оператор выполняется, когда он загружен это правда. Эта линия гарантирует, что это так (пока вы не поместите любой код после этой строки). Это Способ Perl убедиться, что это успешно проанализировал весь путь до конец файла.

См. http://mathforum.org/~ken/perl_modules.html

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

...