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?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top