[Perl] FileHandles en Windows....
Alejandro G. Bedoya
nezumi@prodigy.net.mx
Tue, 02 Apr 2002 18:08:55 -0600
>Ahi si no le atinaste. Precisamente son complicados de entender por
>que son muy faciles de usar. La documentacion que estas leyendo es
>para implementar uno mismo el acceso. Pero hay modulos que ya lo
>hacen, por lo menos para casos como el que estamos tratando. Nadamas
>le dices:
Nope, permiteme diferir para no variar. Independientemente si el
"sistema" sea sencillo o complejo(ahi si), si te lo explican complica=
do y/o
eres medio wey y no le entiendes, no podras implementarlo. La prueba =
esta en
los profesores, algunos te "explican" algo de una manera tan complica=
da que
jamas le entiendes, pero recuerda que siempre hay uno que llega y te =
explica
exactamente lo mismo y le entiendes a la primera y pasas el examen de=
pelos.
Obviamente depende tambien de que tan wey sea el alumno o no, pero lo=
s
buenos profesores siempre se explican bien hasta con el mas wey de lo=
s
alumnos. O no??? La regla ser=EDa "Si el sistema es dicifil de
explicar/entender, ser=E1 dificil de implementar independientemente s=
i el
sistema en si es sencillo o complejo".
>use AnyDBM_File;
>tie %tu_hash, 'AnyDBM_File', 'un_archivo';
>Y ya, a partir de ese momento, todo acceso a %tu_hash, no se da en
>memoria, sino en el disco.
Y me imagino que mientras no lo llame, no se mete en memoria. El
problema aqui, y seguramente el porque no lo use es como inicias defi=
niendo
tus campos, como borrar algo, como sabes si existe un registro, apare=
cen
como undefined el hash, etc....
>=BFY para que trabajas si alguien ya lo hizo? Seguramente alguno de
>DBD::RAM, DBD::SQLite o DBD::CSV hace lo que necesitas. Y si no, est=
an
>cerca, as=ED que mejor contribuye a ellos, ahorrate trabajo, y coope=
ra
>con la comunidad. O si en tu proyecto no te permiten cooperar, por l=
o
>menos ahorrate chamba.
Pues tambien lei algo al respecto pero igual no los use porque se=
me
hacian complicados... pero ser=EDa cosa de revisarlos nuevamente, lo =
=FAnico que
tengo escrito en piedra es que el sistema debe de ser sencillo. Sin e=
mbargo
me gusta a veces complicarme la vida y hacer las cosas. Para mi progr=
amar es
como hacer un rompecabezas, no me interesa armar uno de 20 piezas, yo=
voy
por los de 1500 piezas y mas! Aparte as=ED aprendo.
>No hab=EDa yo entendido bien. Por lo que veo, si tiene que ver con l=
o
>que dice Gunner de la memoria. La bronca no es si se cierra el
>FileHandle, es que lees todo el arvhivo a memoria. Cuando terminas d=
e
>procesarlo, perl no necesariamente libera la memoria que ocup=F3 par=
a
>los datos, de modo que, cuando lees el siguiente, necesita reservar
>m=E1s memoria. Y luego m=E1s para el siguiente. Verifica que tus var=
iables
>esten saliendo de contexto. Y que no estes usando 'closures'
>escondidas por ah=ED, por que eso hace que las referencias no se
>pierdan. No me acuerdo mero cual es la bronca de &funcion(), pero
>quitale el &, por si las dudas.
No creo que sea bronca de "closures"(cualquier cosa que sea eso),=
ya que
si fuera eso, tambien funcionaria mal en PERL de Linux. Independiente=
mente
hice la siguiente prueba:
open(FileHandle,$_[0]) || die "$_[0]: $!";
close(FileHandle);
my @FileData =3D <FileHandle>;
Mi teoria era que @FileData en Linux va a regresa 0 datos, lo cua=
l hizo.
Y que en Windows si iba a regresar todos los datos, lo cual no hizo. =
Es
decir que el FileHandle despues de close ciertamente se muere en amb=
os
casos. Intente esto, simulando el acceso l=EDnea por linea con el whi=
le:
my @FileData;
open(FileHandle,$_[0]) || die "$_[0]: $!";
while($_ =3D <FileHandle>) {
push @FileData, $_;
}
close(FileHandle);
Y "oh sorpresa!", con el mismo archivo NDB de 62 mil registros, e=
n
Windows se tarda 5 segundos en vez de 8 originales! Es decir que es m=
as
eficiente el while por linea que la igualaci=F3n de un jal=F3n!!!! En=
Linux
tambien se tardaba menos, casi 3 segundos en vez de los 4 originales!=
Sin
embargo, en Windows nuevamente la segunda vez se tarda 172 segundos, =
pero la
tercera vez se tarda nuevamente 4 segundos!!! Entonces si tiene algo =
que ver
el como procesas el archivo!!!
Independientemente de que este mal meter todo en @FileData, es un
proceso, de que otra forma se podria hacer????
---
Sinceramente...
Alejandro G. Bedoya
InterAccion.COM Ponemos su Internet en Acci=F3n