[Perl] FileHandles en Windows....
Alejandro G. Bedoya
nezumi@prodigy.net.mx
Tue, 02 Apr 2002 16:00:22 -0600
>Antes de continuar, te vuelvo a sugerir echarle un ojo a la funci=
=F3n tie de
>Perl (perldoc -f tie, o si est=E1s en Windows, debe estar dentro de =
la
>p=E1gina de ayuda de perlfunc). Esto te permite hacer algo as=ED: (t=
omado de
>esa p=E1gina)
Si, ya hace mucho habia visto esa posibilidad, y la verdad no le
entendi. Y por lo general si es complicado de explicar/entender, ento=
nces es
complicado de usar. Lo volvi a ver y sigo si entenderle("man perltie"=
est=E1
mas completo), muy seguramente porque se maneja como objeto y a mi
penosamente no se me da eso...
Adem=E1s, por ahi mencionaron que se manejan como binarios, pues =
no me
sirve entonces. Por lo que sale mas barato comprarle m=E1s memoria a =
la compu
que usar TIEs para mi caso. Tambien quien sabe como le hagas para
relacionar una tabla con otra... como yo lo hago es f=E1cil gracias a=
perl:
my %Usuarios=3D&GETNDBFILE1("usuarios.ndb");
my %Ordenes=3D&GETNDBFILE1("ordenes.ndb");
my $IDord=3D50;
print "La orden $IDord la hizo
$Usuarios{$Ordenes{$IDord}{'IDUSUARIO'}}{'NOMBRE'}.";
Sin embargo, mi objetivo es hacer una nueva funcion con algo parecido=
a:
my %Usuarios=3D&GETNDBFILE2("select * from usuarios where estado=3D1 =
orderby
nombre");
Aqui seguirias usando los archivos NDB, pero los accesas tipo SQL=
,
ahorrandote memoria ya que usarias el where, y luego ordenados con el
orderby, todo lo que no hace mi funci=F3n actual. Aunque creo que eso=
ya lo
hace el DBI con archivos planos. El problema aqui es hacer el parser =
SQL.
Eso me mantendr=E1 entretenido un buen rato. =3D)
>Yo creo que se debe a la manera en que Unix y Windows manejan la
>memoria... Probablemente en Windows Perl tenga que estarle pidiendo =
al
>kernel m=E1s y m=E1s pedazos de memoria, lo cual toma bastante tiemp=
o (ya
>conoces la afici=F3n de Windows de 'thrashear' con la memoria virtua=
l). En
>los Unixes que conozco, el manejo de memoria es mucho m=E1s limpio y
>eficiente.
Pos quien sabe, yo creo que esta mal el PERL para Windows... debe=
ria de
matar el FileHandle con el close. Si fuera de Windows, se tardar=EDa =
igual
aunque trasheara la memoria.
>No acostumbro usar flocks, pero le=ED hoy en la ma=F1ana un art=EDcu=
lo en The
>Perl Journal (viene en el Sysadmin de marzo, probablemente lo encuen=
tres
>a=FAn en alg=FAn Sangrons) que habla acerca de los sem=E1foros... Si=
vas a tener
>concurrencia, muchas veces un flock puede quedarse corto.
Pero deberia de funcionar el flock. Digo, pa' que hago semaforos =
si el
sistema debe de ahorrarme ese trabajo, no???
>S=ED, a menos que (aprovechando que usas Perl 5.6) uses filehandles =
l=E9xicos,
>que mueren al salir del bloque en que fueron definidos:
Fijate, acabo de modificar rapidamente mi funcion para hacerlo lexico=
y en
windows el mismo archivo la primera vez se tarda 10 segudos, dos m=
=E1s que sin
usar lexicos, y sigue tard=E1ndose mucho m=E1s para la segunda leida.=
..
open(my $FileHandle,$_[0]) || die "$_[0]: $!";
my @FileData =3D <$FileHandle>; #Aqui esta la bronca...
close($FileHandle);
Espero haber usado bien el filehandle l=E9xico...
---
Sinceramente...
Alejandro G. Bedoya
InterAccion.COM Ponemos su Internet en Acci=F3n