[Cascavel-pm] Duvida com declaração de variáveis our, my e local
Agustinho Coelho
agustinho_coelho em yahoo.com.br
Terça Julho 29 05:18:18 PDT 2008
Nelson Ferraz wrote:
> 2008/7/28 Agustinho Coelho <agustinho_coelho em yahoo.com.br>:
>
>> Boa Tarde a todos,
>>
>> Seguindo orientações do pessoal da lista eu comecei a declarar o uso de
>> *strict *e *warnings *no início dos programas.
>>
>
> Todos nós ficamos muito felizes com isso!
>
> Experimente colocar um use diagnostics para obter ainda mais
> informações sobre as mensagens de erro.
>
> Com relação ao seu problema, em particular, parece que você esqueceu
> de um ponto-e-vírgula de pois do print "Digite: ".
>
>
>> OBS: Eu sei que é uma dúvida bem básica mas não consegui compreender muito
>> bem e gostaria que isso não comprometesse os programas.
>>
>
> Você fez muito bem em colocar use strict e use warnings em seu
> programa. Eles vão te ajudar a programar melhor.
>
> Veja também a ferramenta perlcritic, que vem com o módulo Perl::Critic.
>
> []s
>
> Nelson
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
> No virus found in this incoming message.
> Checked by AVG - http://www.avg.com
> Version: 8.0.138 / Virus Database: 270.5.6/1577 - Release Date: 7/28/2008 6:55 AM
>
>
>
>
/Realmente eu esqueci a vírgula... Desculpas.../
> Agostinho
>
> Vou tentar te dar um exemplo prático, mas pode ficar meio comprido:
>
> Chamamos "escopo" o maior bloco sintático que envolve uma variável.
> Bloco sintático, em Perl, é normalmente delimitado por "{" e "}". Por
> exemplo, todo comando de loop tem um bloco sintático (explícito ou
> implícito) associado com ele:
>
> foreach my $item ( @compras ){ # Escopo do "foreach"\
> process_shopping_item( $item );
> } # final do escopo do "foreach"
>
> ou
>
> sou_um_unico_comando_mas_estou_no_escopo_do() foreach ( @coisas );
>
> ou mesmo
>
> { # olha, um bloco sem loop!
> my $aqui = 'dentro do escopo';
> faz_coisas_com( $aqui );
> } # terminou o escopo-sem-loop!
>
> Note que as variáveis $item (no primeiro foreach) e $aqui (no último
> exemplo) pertencem a escopos explícitos.
>
> Quando definimos uma variável com "my", ela existe apenas dentro do
> bloco sintático que contém o escopo onde ela está definida:
>
> foreach my $item ( @compras ){
> # $item existe aqui dentro...
> }
> # ... mas não existe aqui fora.
>
> Isso encerra a compreensão de escopo e my.
>
> Agora vamos tentar explicar a diferença de "my" e "local". São muito
> parecidas, mas tem uma diferença sutil. "my" declara uma variável
> associada com um escopo. Quando o bloco sintático que contém o escopo
> termina de executar, o escopo associado é destruído, e a variável vai
> junto com ele.
>
> "local" fucniona como "my", mas não declara uma variável associada com
> o escopo. Ao invés disso, "local" arranja para que o valor original da
> variável seja re-colocado quando o bloco sintático onde está a
> declaração "local" terminar e o escopo associado for destruído.
>
> Por exemplo:
>
> #!/usr/bin/perl
> use strict;
> use warnings;
> our $valor;
> {
> local $valor = 10;
> {
> local $valor = 20;
> print qq{Valor: $valor\n}; # 20
> }
> print qq{Valor: $valor\n}; # 10
> }
>
> Aqui, temos um exemplo de uso de "local" e "our" bem educativo.
> Se você substituir "our" por "local", o Perl vai reclamar que não
> existe declaração da variável "$valor":
>
> #!/usr/bin/perl
> use strict;
> use warnings;
> local $valor;
> {
> local $valor = 10;
> {
> local $valor = 20;
> print qq{Valor: $valor\n}; # 20
> }
> print qq{Valor: $valor\n}; # 10
> }
>
> termina com montes de erros "Global symbol '$valor' requires explicit
> package name at..."
>
> O que "our" faz é declarar uma variável mais ou menos como "my", mas,
> ao invés de associar a variável com o escopo léxico (o bloco
> sintático, lembra?) ela associa com o pacote. Isso quer dizer que todo
> o código que pertence ao mesmo pacote pode ver a variável, mesmo que
> em arquivos diferentes, e que todo o código dentro do arquivo também
> pode ver a variável.
>
> Agora, eu acho que você já sabe o bastante para começar a brincar.
> Por favor não se acanhe e pergunte qualquer coisa que você não
> compreendeu até agora.
> Lembre-se: isso não é toda a informação, é apenas uma introdução
> rápida para o mecanismo... :)
>
> Putamplexos!
Luís,
Valeu mesmo pela explicação!!!
Abs,
Agustinho.
Mais detalhes sobre a lista de discussão Cascavel-pm