[PortoAlegre-pm] Quiz
Adriano Ferreira
a.r.ferreira em gmail.com
Segunda Fevereiro 5 08:27:16 PST 2007
On 2/5/07, Igor Sutton <igor.sutton em gmail.com> wrote:
> Assumindo que ref($data) devolve 'ARRAY', o que acontece quando
> utilizamos o seguinte código?
>
> foreach($data) {
> print;
> }
Só completando a resposta do Igor, o foreach sobre uma variável
escalar é um laço que executa uma vez só e faz um alias da variável do
loop. Isto pode ser útil às vezes:
foreach ($data->{struct1}->{struct2}->[2]->{struct3}) {
$a = $_ * (1 - $_)/(1 + $_)
}
ao invés de
$a = $data->{struct1}->{struct2}->[2]->{struct3} *
(1 - $data->{struct1}->{struct2}->[2]->{struct3})/
(1 + $data->{struct1}->{struct2}->[2]->{struct3})
(É óbvio que
$v = $data->{struct1}->{struct2}->[2]->{struct3};
$a = $v * (1 - $v)/(1 + $v)
funciona também mas não é tão sexy. No entanto é diferente porque a
atribuição $v = faz cópia de números e strings.)
No caso em que ref($data) eq 'ARRAY', a resposta é que a representação
string do array vai ser impressa, algo como
$ perl -e '$a = []; foreach ($a) { print }'
ARRAY(0x10240170)
############
Como um comentário, para um laço tão pequeno, um modificador pode ser
usado também passando
> foreach($data) {
> print;
> }
para
print foreach ($data); # ou
print foreach (@$data); # se era esta a idéia
Adriano.
Mais detalhes sobre a lista de discussão PortoAlegre-pm