| Contexto :: Preserve código de ejecución después de una llamada de subrutina, preservando el contexto que la subrutina habría visto si era la última declaración en la persona que llama |
Descargar ahora |
Contexto :: Preserve Clasificación y resumen
- Licencia:
- Perl Artistic License
- Nombre del editor:
- Jonathan Rockway
- Sitio web del editor:
- http://search.cpan.org/~jrockway/
Contexto :: Preserve Etiquetas
Contexto :: Preserve Descripción
Ejecutar código después de una llamada de subrutina, preservando el contexto que la subrutina habría visto si era la última declaración en la persona que llama Contexto :: Preserve es un módulo PERL que le ayuda a ejecutar el código después de una llamada de subrutina, preservando el contexto que la subrutina habría visto si fue la última declaración en el llamante.synopsishave, ¿alguna vez escribiste esto? mi ($ resultado, @Result); # Ejecutar un sub en el contexto correcto si (! Definido Wantarray) {Algunos :: Código (); } Elsif (Wantarray) {@Result = Algunos :: Código (); } else {$ resultado = algunos :: Código (); } # Haz algo después de algunos :: Código $ _ + = 42 para (@Result, $ Result); # Finalmente devuelve el valor correcto si (! Definido Wantarray) {return; } Elsif (Wantarray) {Return @Result; } else {devuelve $ resultado; } Ahora, solo puede escribir esto en su lugar: use el contexto :: Preserve; Devolver Preserve_Context {algunos :: Código ()} After => Sub {$ _ + = 42 para @_}; A veces necesitas llamar a una función, obtener los resultados, actuar sobre los resultados, luego devolver el resultado de la función. Esto es doloroso debido a contextos; La función original puede comportarse diferente si se llama en el contexto de void, escalar o en la lista. Puedes ignorar los diversos casos y simplemente elegir uno, pero eso es frágil. Para hacer las cosas, debe ver en qué caso le llaman, y luego llame a la función en ese contexto. Esto da como resultado 3 rutas de código, que es un dolor para escribir (y mantener). Este módulo automatiza el proceso. Usted proporciona un CODEREF que es la "Función original", y otro CODEREF para ejecutarse después de las ejecuciones originales. Puede modificar el valor de retorno (alias hasta @_) aquí, y hacer lo que sea que tenga que hacer. WestArray es correcto dentro de ambos coderefs; Sin embargo, en "Después", sin embargo, el valor de retorno se ignora y el valor WantRay Returns está relacionado con el contexto en el que se llamó la función original. Requisitos: · Perl
Contexto :: Preserve Software relacionado