Что означает "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 и выше), которые имеют государство ключевое слово.
модули 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 не будут доступны во всем мире?