/ / Какво означава "1;" означава в Perl? - perl, perl-модул

Какво означава "1" в Perl? - perl, 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 и Sub?

Отговори:

65 за отговор № 1

1 в края на модула означава, че модулът се връща true да се use/require изявления. Той може да се използва, за да се установи дали успешното монтиране на модула е успешно. В противен случай, use/require ще се провали.

$somevar е променлива, която е достъпна само в рамките на блока. Той се използва за симулиране на "статични" променливи. Започвайки от Perl 5.10, можете да използвате ключова дума state ключова дума, за да има същите резултати:

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

11 за отговор № 2

Когато заредите модул "Foo" с use Foo или require(), perl изпълнява Foo.pm файл като обикновен скрипт. Той очаква да върне истинска стойност, ако модулът е бил зареден правилно. Най- 1; прави това. Може да е 2; или "hey there"; също толкова добре.

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


8 за отговор № 3

Модулите трябва да върнат истинска стойност. 1 е истинска стойност.


8 за отговор № 4

Perl модулите трябва да върнат нещо, което се оценява в истински. Ако не, Perl съобщава за грешка.

C:temp>cat MyTest.pm
package MyTest;
use strict;
sub test { print "testn"; }
#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", всичко, което оценява до истината, ще работи.

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

C:temp>perl -e "use MyTest"

C:temp>  (no error here)

За очевидни причини друга популярна връщаща стойност е 42.

Съществува списък с хладни връщащи стойности, поддържани на http://returnvalues.useperl.at/values.html.


4 за отговор № 5

Сгъваемите скоби ограничават обхвата на локалната променлива $ somevar:

{ моят $ somevar; ... } Обхватът на # # somevar завършва тук


4 за отговор № 6

От документацията за изисква:

Файлът трябва да се върне вярно като последното изявлениеда се посочи успешно изпълнение на кода за инициализация, така че е обичайно да прекратите такъв файл с 1; освен ако не сте сигурни в това връщане вярно иначе. Но това е по-добре само за да поставите 1; , ако добавите повече изявления.


1 за отговор № 7

Не знам много за Perl, но обикновено създавате обсег, използвайки къдрави скоби. Вероятно $ somevar не трябва да се предлага в световен мащаб?