Ver Mensaje Individual
  #2 (permalink)  
Antiguo 26/09/2003, 16:52
kidd
 
Fecha de Ingreso: mayo-2003
Mensajes: 328
Antigüedad: 21 años
Puntos: 0
Hola Caricatos:


Yo veo te código bien, esta sencillo y sin mayores complicaciones, lo que si es que te haría una recomendacion, te recomiendo que uses flock();

El problema, es que esta funcion sólo funciona en UNIX, así que si estas en Windows ni lo intentes, no existe.

Deja te explico un poco que es lo que hace flock().

Digamos que entran 2 usuarios con una diferencia de milisegundos. Entonces abres el archivo para sacar la cuenta con el usuario 1, pero con el usuario 2 ya pasaste ese paso y vas a escribir la nueva cuenta. Como vas a abrir y escribir el archivo al mismo tiempo, lo que puede ocasionar esto es un archivo corrupto.

Por esto, UNIX tiene la funcion de flock() , que lo que hace es "bloquear" el archivo mientras se esta usando.

Entonces en el mismo ejemplo, si usaras flock, al usuario 2 intentar escribir el archivo, tendría que esperar a que el usaurio 1 saque la cuenta y ya después escribir.


El código que debes usar es muy sencillo y aquí te pongo el ejemplo de como quedaría tu código.

Al leer el archivo:
Código:
open(cuenta, "<cuenta.txt") || &error("No se ha podido abrir el archivo");
flock(cuenta, 1);
$cuenta = <cuenta>;
close(cuenta);
Usamos el 1, que ves en la expresión de flock() porque esto permite que el archivo pueda ser leído, pero no escrito mientras se usa.


Al escribir el archivo:
Código:
open(wcuenta, ">cuenta.txt") || &error("Tampoco para escribir");
flock(cuenta,2);
print wcuenta "$cuenta";
close(wcuenta);
En este caso usamos el 2 para evitar que el archivo sea leído o escrito mientras sea usado.


Al usar flock() evitas el problemas de que sea escrito el archivo al mismo tiempo, lo que puede ocasionar, una mala cuenta o el archivo corrupto y más cuando tu sitio tiene mucho tráfico.


También lo que te recomiendo es que SIEMPRE que termines tu aplicaciones de perl uses la siguiente función:
Código:
exit();
Con esto términas por completo la aplicación, esto te va a evitar loops no deseados.

En cuanto a tus gráficos aquí hay unos módulos que podrías utilizar:

Chart::Graph
GD::Graph
Chart::Pie (Gráficas de "pay")

Puedes buscar estos módulos y más en http://search.cpan.org/

SALUDOS