![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
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. |
![]() |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|