Подтвердить что ты не робот

Почему 1 в конце каждого пакета perl?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

Из wikipedia Perl module:

   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).

Ответ 4

1

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

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

Вы можете использовать любое утверждение, которое оценивается как true. 1 только что случилось с perl-идиомой.