Что означает "1;" в Perl?

я столкнулся с несколькими модулями Perl, которые, например, похожи на следующий код:

package MyPackage;

use strict;
use warnings;
use constant PERL510  => ( $] >= 5.0100 );

require Exporter;

our @ISA = qw(Exporter);  
our @EXPORT = qw( );

{  #What is the significance of this curly brace?

    my $somevar;

    sub Somesub {
      #Some code here 
    }
}

1;

что такое значение 1; и фигурных скобок, которые заключают в себя $somevar и суб?

7 ответов


1 в конце модуля означает, что модуль возвращает true to use/require заявления. Он может быть использован, чтобы сказать, если инициализация модуля проходит успешно. В противном случае, use/require не удастся.

$somevar - переменная, доступ к которой возможен только внутри блока. Он используется для имитации "статических" переменных. Начиная с Perl 5.10 вы можете использовать ключевое слово state ключевое слово, чтобы иметь те же результаты:

## Starting from Perl 5.10 you can specify "static" variables directly.
sub Somesub {
    state $somevar;
}

при загрузке модуля " Foo " с помощью use Foo или require(), perl выполняет Foo.pm файл, как обычный скрипт. Он ожидает, что он вернет значение true, если модуль был загружен правильно. The 1; это. Это может быть 2; или "hey there"; так же хорошо.

блок вокруг объявления $somevar и ограничивает область действия переменной. Таким образом, он доступен только из Somesub и не очищается при каждом вызове Somesub (что было бы в случае, если бы он был объявлен внутри тела функции). Эта идиома была заменена в последних версиях perl (5.10 и выше), которые имеют государство ключевое слово.


модули должны возвращать значение true. 1 - Это истинная ценность.


модули Perl должны возвращать значение true. Если они этого не делают, Perl сообщает об ошибке.

C:\temp>cat MyTest.pm
package MyTest;
use strict;
sub test { print "test\n"; }
#1;  # commented out to show error

C:\temp>perl -e "use MyTest"
MyTest.pm did not return a true value at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

C:\temp>

хотя обычно используется " 1;", все, что оценивается как true, будет работать.

C:\temp>cat MyTest.pm
package MyTest;
use strict;
sub test { print "test\n"; }
"false";

C:\temp>perl -e "use MyTest"

C:\temp>  (no error here)

на очевидным причинам другое популярное возвращаемое значение 42.

есть список прохладных возвращаемых значений, поддерживаемых в http://returnvalues.useperl.at/values.html.


фигурные скобки ограничивают область локальной переменной $somevar:

{ мой $somevar; ... } # $область somevar заканчивается здесь


из документации require:

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


Я мало знаю о Perl, но обычно вы создаете область с помощью фигурных скобок. Вероятно, $somevar shoudln не будут доступны во всем мире?