O que significa "1;" significa em Perl?
-
20-09-2019 - |
Pergunta
Eu vim através de alguns módulos Perl que, por exemplo, parecer semelhante ao seguinte código:
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;
Qual é o significado de 1;
e as chaves que delimitam o $somevar
e o Sub?
Solução
1
no final de um módulo significa que o módulo retorna true
para use/require
demonstrações.Ele pode ser usado para saber se o módulo de inicialização for bem-sucedida.Caso contrário, use/require
irá falhar.
$somevar
é uma variável que é acessível apenas dentro do bloco.Ele é usado para simular o "estático" variáveis.Começando a partir de Perl 5.10 você pode usar palavras-chave state
palavra-chave para ter os mesmos resultados:
## Starting from Perl 5.10 you can specify "static" variables directly.
sub Somesub {
state $somevar;
}
Outras dicas
Quando você carrega um módulo "foo" com use Foo
ou require()
, Perl executa o Foo.pm
Arquivo como um script comum. Ele espera que ele retorne um valor verdadeiro se o módulo foi carregado corretamente. o 1;
faz isso. Poderia ser 2;
ou "hey there";
tão bem.
O bloco em torno da declaração de $somevar
e a função Somesub
limita o escopo da variável. Dessa forma, é acessível apenas de Somesub
e não é liberado em cada invocação de Somesub
(o que seria o caso se fosse declarado dentro do corpo da função). Este idioma foi substituído em versões recentes de Perl (5.10 e superior) que têm o Estado palavra -chave.
Os módulos precisam retornar um valor verdadeiro. 1
é um valor verdadeiro.
Os módulos Perl devem retornar algo que avalia para TRUE. Se não o fizerem, o Perl relata um erro.
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>
Embora seja habitual usar "1", qualquer coisa que avalie o TRUE funcionará.
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)
Por razões óbvias Outro valor de retorno popular é 42.
Há uma lista de valores legais de retorno mantidos em http://returnvalues.useperl.at/values.html.
Os aparelhos encaracolados limitam o escopo da variável local $ algumvar:
{meu $ algumvar; ...} # $ SHOW SCOPE TERMINA AQUI
Da documentação para exigir:
O arquivo deve retornar true como a última instrução para indicar a execução bem -sucedida de qualquer código de inicialização; portanto, é habitual encerrar esse arquivo com 1; A menos que você tenha certeza de que retornará verdadeiro de outra forma. Mas é melhor apenas colocar o 1; , caso você adicione mais declarações.
Não sei muito sobre Perl, mas geralmente você cria um escopo usando aparelhos encaracolados. Provavelmente $ SomeVar Shoudl não estará disponível globalmente?