[Cascavel-pm] Readdir com foreach/while

Renato Santos renato.cron em gmail.com
Quarta Abril 11 07:51:46 PDT 2012


Até onde eu sei, com ararys, até uma certa versão, o perl gerava a lista
toda, e depois fazia o foreach, mas acho que foi arrumado no 5.10 (? nao
vou funçar a docs agora!)


Lembro que foreach my $x( (1, 2, 3, (4..20000000))) não aloca os 20000000
itens na memoria, agora não sei se o processamento de buffers são os mesmos.

Acho que tem otimização sim, pois aparentemente é só sintax que está
mudando.


2012/4/11 Ednardo Lobo <ednardo em lobo.eti.br>

> Enfim, usar "foreach" para percorrer listas de tamanho variável e
> indeterminável poderá ser uma grande estupidez além de resultar num
> desastre.
>
> foreach my $f (grep /^[^\.]/.readdir DH) {
> ...
> }
>
> Já usando "while" mantemos o consumo restrito ao tamanho individual de
> cada elemento da lista, não importando quantos sejam.
>
>
> while (my $f = readdir DH) {
>   next if $f =~ /^\./;
> }
>
> Mas será que internamente, quando ambos os códigos são executados pelo
> Perl, ele não realiza alguma otimização tornando tudo irrelevante?
>
> Em 11-04-2012 10:32, Stanislaw Pusep escreveu:
>
>  foreach my $f (readdir DH) { ... }
>>
>> seria aproximadamente equivalente a
>>
>> my @f = readdir DH;
>> foreach my $f (@f) { ... }
>>
>> Ou seja, todos os resultados são pré-carregados e depois enumerados.
>> Mais lento não fica, mas definitivamente consome mais memória.
>>
>> ABS()
>>
>
> --
>    Ednardo Lobo
>
>    www.lobo.eti.br
> ______________________________**_________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/**listinfo/cascavel-pm<http://mail.pm.org/mailman/listinfo/cascavel-pm>
>



-- 
Saravá,
Renato CRON Santos
http://www.renatocron.com/blog/
@renato_cron <http://twitter.com/#!/renato_cron>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20120411/1a3c9fbf/attachment.html>


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