El 27/05/12 15:13, JJ Merelo escribió:
Hola Pregunta corta: ¿Cómo se hace para que Perl no devuelva un valor
de una subrutina?

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?


Según perlsub, no se puede: una subrutina siempre devolverá un valor,
incluso aunque no pongamos un return. En ese caso, será el valor de
la última instrucción ejecutada.

Además, depende de en qué contexto se ejecute la subrutina, ese valor
será convertido a escalar o lista. Y si no devolvemos ningún valor, aún
así se creará una lista vacía (en contexto lista), el valor indefinido
(en contexto escalar) o "nada" si está en contexto void.

(¡Oops! ¿Nada?)

JF^D
_______________________________________________
Madrid-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/madrid-pm

Responder a