The UNIX and Linux Forums  


Go Back   O UNIX e Linux Forum > Top Fóruns > Programação Shell Script e
.
google unix.com



Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Perl: Global Pesquisar e substituir epi8 Programação Shell Script e 3 05-06-2008 04:18
Problema com variáveis globais e locais qzv2jm Programação Shell Script e 2 03-04-2008 01:18
Declarando Variáveis globais em KLD int80h BSD 1 01-21-2008 09:11
variáveis globais em KLD (FreeBSD) int80h Alto Nível de programação 0 01-17-2008 08:14
Como declarar variáveis globais para o shell script risshanth UNIX para Dummies Perguntas & Respostas 2 10-31-2007 03:27

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 08-26-2005
reggiej reggiej is offline
Usuário
  
 

Join Date: May 2005
Lugares: 27
perl variáveis globais

Alguém pode me dar o "sermão" sobre o motivo pelo qual você não deve fazer toda a sua programação em varables global quando perl. Tenho vindo a fazer isto, mas ouvi dizer que não é uma boa prática.
  #2 (permalink)  
Old 08-26-2005
vertigo23's Avatar
vertigo23 vertigo23 is offline
Usuário
  
 

Join Date: Jul 2005
Localização: SF, CA
Lugares: 73
De um ponto de vista puramente prático do ponto de vista, não é tanto que globals são ruins, como é que locais são realmente útil. Diga que você está em um ciclo, e que pretende fazer o mesmo com uma função diferente de dados em cada iteração. Se você usar um local (minha) variável para alimentação de dados para a função, você está garantido que não há dados anteriores a partir de uma iteração do ciclo pode poluir uma iteração mais tarde, quando dizem que a variável não ficar cheia de cada vez.

Além disso, com variáveis locais, você pode re-utilização comum nomes como variável $ i loop de iterações, e não precisa se preocupar com os dados já estão lá no var.
  #3 (permalink)  
Old 08-27-2005
cbkihong cbkihong is offline Forum Advisor  
Orientador
  
 

Join Date: Sep 2002
Localização: Hong Kong, China
Posts: 1.624
Mantendo as coisas locais que devem ser locais é uma boa prática de gestão.

Tecnicamente falando, utilizando locais (minha) variáveis decorre da necessidade de eliminar a namespace confrontos, mas a verdade é que tem um pouco alheios efeito. Ou seja, para ter certeza de que o alcance de uma variável apenas depende do alcance lexical apenas. Então você pode dizer o âmbito da variável directamente pelo olhar dentro do actual bloco e em mais lado nenhum. Subrotinas invocados a partir de dentro deste bloco não vai ver a variável. assim,


Código:
{  # BLOCK 1
     my $var = 10;
     {  # BLOCK 2
          local $var2 = 100;
          &mysub;
          print "\$var = $var\n";    # (1)
          print "\$var2 = $var2\n"; # (2)
     }
     $var += 10;
     print "\$var = $var\n";         # (3)
     print "\$var2 = $var2\n";      # (4)
}
&mysub;
print "\$var = $var\n";     # (5)
print "\$var2 = $var2\n";  # (6)

sub mysub {
     $var += 2;
     $var2 += 2;
}

Você pode dizer que o âmbito de "my $ var" é no bloco 1, mas não chamou a subrotinas dentro. Então (1) e (3), 10 e 20, respectivamente. Então o que fez $ var mysub () mudança na subrotina? It's the global $ var, o que é mostrado em (5) como "4" (2 invocações), após o alcance do "my $ var" expira. Como você pode estar certo de o âmbito de aplicação (em vez de depender de a pilha de chamadas, ou seja, a nidificação de subrotinas que se chama), será mais fácil para depurar quando o valor está errado. Perl também lhe dá uma variante "local", que implementa o alcance-depender-on-call-pilha política (raro entre comumente em uso hoje linguagens de programação), de forma (2), (4), (6), são 102, e undef 2. Isto tem uma desvantagem que o alcance depende da chamada pilha em tempo de execução, por isso, é mais confusa.

Se você precisa para lidar com referências, você pode precisar de expirar apontou para uma estrutura de dados por uma referência a um determinado ponto do ciclo do script, controlando a vida das referências. Se suas referências são declaradas como variáveis locais que irão naturalmente sair de campo quando o bloco contendo termina e, posteriormente, se limpar. Caso contrário, as referências como variáveis globais vai ficar por menos que você transferir o seu valor. Isso aumenta a possibilidade de confrontos se esqueça de fazê-lo.

Mas tenha em mente que Perl variáveis globais não são verdadeiramente global (ver o perlmod manpage), mas ainda sujeito ao pacote (aka namespace) mecanismo. Pacote é o método que aborda nome confrontos. Este aspecto é importante porque vamos construir componentes que se destinam a ser reutilizados, de forma que não queremos o $ nome definido em um componente utilizado para $ colidir com outro nome no meu programa. Mas não vou entrar em pormenores de pacotes aqui. Veja a manpage perlmod ou literatura relevante para detalhes.

Isso explica por que você deve tentar colocar o seu código em módulos (pelo menos, em diferentes embalagens) e utilizar variáveis locais na maior parte do tempo. Não só isto torna o código mais reutilizável, também ajuda a prevenir uma série de problemas a longo prazo como o seu código se torna mais complicado quando você tenta stick bits e pedaços juntos.
  #4 (permalink)  
Old 08-29-2005
reggiej reggiej is offline
Usuário
  
 

Join Date: May 2005
Lugares: 27
Obrigado pelas respostas. Vou ter muito melhor compreensão da importância da utilização da terra.
Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 09:41.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0