[Perl] De @foo=<FILE> y otras
Salvador Ortiz Garcia
sog@msg.com.mx
13 Mar 2002 15:55:35 -0600
On Wed, 2002-03-13 at 05:14, Salman PSL wrote:
> : El hecho de que perl sea capaz de comerse a memoria un archivo completo
> : no implica que sea la mejor opci=F3n.
> :
> : En general ser=E1 mas eficiente y m=E1s rapido un:
> :
> : while(my $line =3D <FILE>) { ... }
> :
> : que un
> :
> : @arch =3D <FILE>; for my $line (@arch) { }
>=20
> =BF=BF=BF De verdad ???
Seguro tocayo!
> pues yo siempre estaba usando la segunda opci=F3n en ficheros
> relativamente peque=F1os y solo la primera para ficheros grandes. bueno y=
o utilizo otra
> opci=F3n que es
>=20
> @arch=3D `cat $fichero`;
Pues esa es _peor_ pues generas un fork y un pipe extra.
=20
> Estaba convencido que ir=EDa mas r=E1pido trabajando en RAM que no en HD
Si, trabajar en RAM es m=E1s rapido. Pero gastar RAM por gastarlo no.
Mira, en TODOS los casos anteriores, perl termina leyendo caracter por
caracter, pues necesita encontar los cambios de l=EDnea.=20
Un "@foo =3D <FILE>;" internamente se convierte en algo como:
while(defined ($_ =3D <FILE>)) {
push @foo,$_;
}
Y si despues de todas formas vas a hacer un for o un while, pues ...
Y no quieres saber en que se convierte un "@foo =3D `cat file`!
El objetivo de perl es convertir las cosas f=E1ciles en triviales y las
dificiles en posibles, no tengo, a priori nada en contra de esas
construcciones, pero es importante que los programadores tengan claras
las implicaciones.
Lo que es v=E1lido para un peque=F1o programita o scripcito CGI, puede no
serlo para un sistema m=E1s grande.
Saludos.
Salvador Ortiz.
=20
>=20
> Saludos
> Salvador Guzm=E1n
> Salman PSL
> Vigo, Galicia, Espa=F1a
> +34 986-21.30.27
> +34 627-505-999
> Correo@Salman.ES
> http://salman.net/
> http://aseara.com/
>=20
>=20
>=20
>=20
>=20
> _______________________________________________
> Perl mailing list
> Perl@tlali.iztacala.unam.mx
> http://tlali.iztacala.unam.mx/mailman/listinfo/perl