[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