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
