[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