El 27 de mayo de 2012 16:42, pancho horrillo <[email protected]> escribió:
> On Sun, May 27, 2012 at 03:13:19PM +0200, JJ Merelo wrote: > > Hola > Buenas. > > > Pregunta corta: ¿Cómo se hace para que Perl no devuelva un valor de una > > subrutina? > AFAIK, return; devuelve undef. > En realidad, devolver undef no es devolver nada. Es edvolver undef, y sigue tardando más o menos lo mismo que si haces return 1 o return 0. > > > Pregunta larga: en el MasterMind hay subrutinas que se llaman millones (o > > miles de millones) de veces. El profiler dice que, curiosamente, el > > devolver el valor de la misma es el cuello de botella. Igual hay otra > forma > > de solucionarlo, como meterlas inline (la verdad, no sé como hacerlo) > pero > > lo que he hecho ha sido declarar el prototipo como que devuelvan void y > > hacer que se les pase el hashref de vuelta como parámetro. Marginalmente > > mejora algo, pero sigue devolviendo el valor devuelto por la última > función > > en la subrutina (un map). Añadir return; no mejora prácticamente nada, y > > declararla como void con prototipo tampoco. ¿Alguna idea? > > > Se me ocurre hacer un inline manual, construyendo código programáticamente > que > incruste el código de la función llamada en la llamante, y luego haciendo > eval > de ello. > No vas a ganar mucho si tienes que hacer un eval. Estamos hablando de microsegundos en cada vuelta, más o menos. > > No tengo tiempo de explicarlo más, cuando vuelva luego intentaré > explayarme un > poco más. > > Hope that it helps. > > Eso siempre. Gracias. -- JJ
_______________________________________________ Madrid-pm mailing list [email protected] http://mail.pm.org/mailman/listinfo/madrid-pm
