Zna się ktoś na prel'u ?

Paweł Żurowski pzurowski w pld-linux.org
Nie, 12 Gru 2004, 16:53:55 CET


Dnia 12-12-2004, nie o godzinie 15:26 +0100, Przemysław Iskra
napisał(a):
> Bo ja niebardzo...
> 
> Ale jest sobie coś takiego:
> 
> #v+
> #!/usr/bin/perl
> use strict;
> 
> sub decomposespec {
> 	my $file=$_[0];
> 	open F_IN, "$file";
> 	while (<F_IN>) {
> 		print "$_";
> 		#last;
> 	}
> 	close F_IN;
> }
> 
> my $specdir="/home/users/sparky/pld-cvs/SPECS";
> opendir DIR, "$specdir";
> foreach( sort readdir DIR ) {
> 	next unless /.spec$/;
> 	decomposespec("$specdir/metisse.spec");
> }
> closedir DIR;
> #v-
> 
> 
> czyli około 8000 razy otwiera plik, wypisuje i zamyka
> pod koniec działania program ten zajmuje ~30MB pamięci (przy większym
> pliku więcej)
> to się robi jakaś historia zmiennych czy coś ?
> o cache pliku niema mowy, bo to przecież cały czas ten sam plik;
> 
> jak wewnątrz while odkomentuje się #last to zużywa tyle samo ramu,
> a jak poprostu się napisze: print <F_IN>; zamiast całego while to 
> ilość zużywanej pamięci nie wzrasta, jest około 2MB cały czas
> 
> nie rozumiem tego, jakiś buffer jest ? to jak go wyczyścić ?
> a może błąd w perlu ? (perl-base-5.8.6-2)
> 
> P.S. w czasie pisania tego listu wpadło mi do głowy: zamiast while
> użyłem foreach, program działa z zamierzonym efektem a pamięci nie
> zżera; z tym while jest coś nietak ?

przy zalozeniu, ze tam nie pownno byc "$specdir/metisse.spec", a $_
(albo $specdir/$_), to:
bez lasta wyglada mi to na cos w stylu
        ls /home/users/sparky/pld-cvs/SPECS|grep "spec$"|xargs cat
a z lastem na:
        ls /home/users/sparky/pld-cvs/SPECS|grep "spec$"|xargs head -qn
        1

pozdrawiam
-pawel

-- 
Pawel Zurowski






Więcej informacji o liście dyskusyjnej pld-devel-pl