[Cascavel-pm] Brincadeira / desafio aos Monges
Nilson Santos Figueiredo Junior
acid06 em gmail.com
Sábado Março 11 19:35:31 PST 2006
On 3/11/06, Gabriel Vieira <gabriel.vieira em gmail.com> wrote:
> my $foo = "use php";
> {
> (my $foo = $foo) =~ s/php/Perl/ig;
> print $foo;
> }
> print ", dont $foo";
>
> é valido?
Quando você fez isso, você declarou uma nova variável explícitamente.
Apenas ocorreu de ela ter o mesmo nome que a anterior, mas estar num
escopo léxico diferente.
> my $foo = "use php";
> for("$foo") {s/php/Perl/; print};
Quando você fez isso, você declarou uma variável $_ - só que
implicitamente. Se isso é válido ou não de acordo com a descrição do
problema, aí eu não sei.
> $a = "use php";
> print &{sub { $_[0] =~ s/php/Perl/ and return $_[0]; }}($a);'
Essa solução é errada.
Você *alterou sim* o valor de $a. Basta você dar um "print $a" na
linha seguinte.
Quando você altera a array @_ dentro de uma função, você está
alterando *o valor original*. Por isso não é uma boa prática de
programação utilizar $_[0], $_[1], etc diretamente - a não ser que o
que você queira seja exatamente isso: alterar o valor original.
(Nota: $a e $b são variáveis especiais e nunca devem ser usadas em
nenhum código - a não ser, claro dentro de um bloco de sort() )
-Nilson Santos F. Jr.
Mais detalhes sobre a lista de discussão Cascavel-pm