[Perl] Duda sobre eficiencia....
Salvador Ortiz Garcia
sog en msg.com.mx
Mar Dic 8 21:12:11 CST 2009
Carmen Marcela Alegria C. wrote:
> Hola lista!!
>
> Tenia en mente hacer un script simple para hacer un contador regresivo, dicho contador hace la diferencia entre una fecha "la del fin del mundo" y el dia de hoy.
>
> Tengo estas opciones, cual es mas optima? en otras palabras que es mejor llamar varias veces a una funcion o usar mas variables? Es mas, seguramente hay mejores formas de hacer esto, alguna sugerencias?
>
Si, la lista sigue viva, aunque con muy poco tráfico.
En general las llamadas a funciones son más caras que las variables.
Por otro lado, usar variables que no se necesitan tampoco es una buena
idea, por ejemplo si de localtime no requieres todos los valores puede
hacer simplemente:
($sec, $min, $hour, $mday, $mon, $year) = localtime;
Ahora que, si el resultado en realidad lo quieres en @Today, como
localtime te regresa una lista, puedes
ordenarla al gusto y manipularla directamente, con lo que evitas las
variables temporales:
@Today = (localtime)[6,5,4,3,2,1];
$Today[0] += 1900; $Today[1] += 1; # Ajustes pertinentes
Por otro lado, Date::Calc ya tiene su propio Today_and_Now, así que
podrías hacer:
use Date::Calc qw(Delta_DHMS Today_and_Now);
...
@Today = Today_and_Now;
...
Al final también puedes evitar los arreglos, usar printf y la cosa queda en:
#!/usr/bin/perl
use Date::Calc qw(Delta_DHMS Today_and_Now);
printf "Faltan %d dias, %2d:%2d:%2d para el fin del mundo\n",
Delta_DHMS(Today_and_Now, 2012, 12, 21, 00, 00, 01);
Respecto a cómo ir haciendo mejores "scripts", lo mejor que puedes hacer
es leer mucho código, los módulos populares en CPAN son excelentes
ejemplos, pues además de estar muy cuidados, sus autores son muy buenos
programadores.
Además de los ya clásicos, O'Reilly tiene un "Perl Cookbook" y un "Perl
Best Practices", ambos indispensables en la biblioteca de cualquier
aspirante a JAPH. ;-)
Saludos.
Salvador Ortiz.
Más información sobre la lista de distribución Perl