[Cascavel-pm] Declarar variável como local

Wendel Scardua wendelscardua em gmail.com
Quinta Fevereiro 15 07:11:45 PST 2007


Deixa eu tentar explicar um pouco, do jeito que eu entendo (o cara parece
ter pesquisado a respeito afinal):

"my" declara uma variável, "local" não.

O "local" pega uma variável que *já ecziste* (Quevedo TM), e "salva" o valor
dela, permitindo você usá-la dentro do contexto atual, e ao sair do
contexto, o valor anterior é restaurado.

Isso pode parecer inútil (afinal parece até uma gambiarra, comparado com o
"my"), mas pense no caso de variáveis especiais, como $1, $_, etc, e em
geral variáveis globais, que você *não pode criar* no contexto atual. Nesses
casos, o "local" funciona, salvando o valor delas e restaurando após o final
do contexto.

# Exemplo 1:
my $x = 42; # cria uma variável $x
{
    my $x = 23;  # cria uma nova variável $x , que só existe aqui dentro
    print $x,"\n";
}
print $x, "\n";

# imprime 23 e 42

# Exemplo 2:
my $x = 42; # cria uma variável $x
{
    local $x = 23; # salva o 42, e a mesma variável passa a valer 23
    print $x,"\n";
}  # restaura o 42
print $x, "\n";

# imprime 23 e 42

# Exemplo 3:
$_ = 42;
{
    my $_ = 23;
    print $_,"\n";
}
print $_, "\n";

# dá erro, você não pode declarar my $_ , por $_ ser uma variável global

# Exemplo 4:
$_ = 42;
{
    local $_ = 23;  # salva o 42
    print $_,"\n";
}   # restaura o 42
print $_, "\n";

# imprime 23 e 42

Agora espero que as coisas fiquem mais claras quando você RTFM (como
sugerido pelo Luis)
(e se eu mesmo falei alguma besteira aí em cima, é melhor ficar só com os
perldocs mesmo, hehe)

[]s
Wendel


On 2/15/07, Luis Motta Campos <luismottacampos em yahoo.co.uk> wrote:
>
>
>    RTFM, meu caro:
>    perldoc -f local
>    perldoc -f my
>    perldoc -f our
>
>    Se você quer declarar variáveis, o mais provável é que precise o my
> ().
>
>    Se você postar o seu código problemático, posso ser específico
> sobre o seu problema, e te explicar o que acontece.
>

-- 

"Não ajustar o auto-ajuste" - http://wendel.scardua.net/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070215/a0bef366/attachment-0003.html 


Mais detalhes sobre a lista de discussão Cascavel-pm