El Perl Object Environment ( POE ) es una biblioteca de módulos Perl escritos en el lenguaje de programación Perl por Rocco Caputo et al.
Desde CPAN:
POE, el Perl Object Environment, puede considerarse como un pequeño sistema operativo modular . Se pueden ejecutar uno o más programas o instancias de POE de manera concurrente y, por lo general, son adecuados para la multitarea cooperativa . El paquete POE consta de espacios de nombres y abstracciones que guían el desarrollo futuro de POE en una convención de estilo CPAN abierta .
La arquitectura informal consta de un conjunto de capas con un núcleo en la parte inferior. Este pequeño núcleo representa la capa de eventos que funciona como el bucle principal de cada instancia de POE en ejecución. La primera llamada es al "despachador de eventos": POE::Kernel .
El espacio de nombres POE::Kernel contiene un conjunto de funciones que se conectan al propio núcleo. Estas abstracciones de bucle están diseñadas según la interfaz de puente de bucle de eventos estandarizada de POE: POE::Loop . Se pueden mezclar y combinar según sea necesario para proporcionar servicios de tiempo de ejecución y una función sencilla para la comunicación entre procesos . Las funciones básicas son POE::Loop::Event , POE::Loop::Poll y POE::Loop::Select . También están disponibles POE::Loop::Tk y POE::Loop::Gtk , que ofrecen enlaces a otros puentes de bucle en el entorno externo. Si eso no es suficiente, la abstracción del núcleo POE::Loop proporciona devoluciones de llamadas de señal reutilizables, devoluciones de llamadas de tiempo o alarma y devoluciones de llamadas de actividad de identificador de archivo, así como funciones administrativas como inicializar, ejecutar y finalizar bucles de eventos.
También existe un marco de trabajo de empaquetado de nivel superior, POE::Macro, y una utilidad de depuración para probarlos llamada POE::Preprocessor. Este marco de trabajo ha generado POE::Macro::UseBytes .
Consulte siempre CPAN para ver qué novedades ha colocado la comunidad en el archivo. (...y recuerde el lema de Perl: "Hay más de una forma de hacerlo", según Larry )
El núcleo en ejecución opera a través de máquinas de estados finitos primordiales construidas a partir de otro conjunto de abstracciones regidas por la arquitectura POE::Session . Una POE::Session se define casi trivialmente como un mapa de eventos a las funciones, métodos de clase y/o métodos de objeto que los manejan. Los objetos POE::Session también contienen un espacio de almacenamiento compartido por todos sus manejadores de eventos, llamado montón . De cualquier forma que los corte, los estados están sólidamente identificados y claramente definidos.
Un controlador de eventos con más funciones es una subclase de POE::Session llamada POE::NFA , un autómata finito no determinista controlado por eventos (una máquina de estados finitos más inteligente ). Este controlador de eventos se mueve de un estado estrictamente definido a otro según lo requieran los eventos, las encuestas, las selecciones de usuarios u otros eventos externos. Esta máquina de estados actúa para encapsular una amplia gama de subprocesos controlados por eventos genéricos , lo que permite un seguimiento mucho más estricto a lo largo de la ruta de ejecución que el relativamente informal POE::Session.
El siguiente requisito del kernel es que existan controladores de entrada y salida en una única capa de E/S denominada Wheels . Las Wheels inician acciones, gestionan los eventos de bajo nivel resultantes y producen eventos de nivel superior para las sesiones que las utilizan. Las Wheels, al igual que las Sessions y los Loops, se construyen a partir de un conjunto uniforme de abstracciones ( POE::Wheel ) que se encuentran sobre el kernel. Hay siete Wheels muy especializadas y bien definidas en la distribución base de POE:
Los controladores son los encargados de leer y escribir los identificadores de archivos. Se construyen de acuerdo con las definiciones menos abstractas contenidas en el módulo POE::Driver . El controlador principal implementado al momento de escribir este artículo es POE::Driver::SysRW , un lector/escritor de identificadores de archivos universal diseñado especialmente para POE::Wheel::ReadWrite.
La siguiente capa, construida a partir de POE::Filter y probablemente el foco de la mayoría de los expertos en ofuscación de Perl (ver POE #POE Humor a continuación), es el conjunto POE::Filter :
"Los filtros traducen entre transmisiones sin procesary trozos cocidos de sabrosa dada". por `sungo'
Consulte POE en CPAN para obtener la lista completa
Según la documentación de POE::Component , se han escrito varios paquetes más grandes en POE . Se trata de módulos controlados por eventos, muchos de los cuales actúan como pequeños demonios que proporcionan servicios a paquetes más grandes a los que pertenecen. Algunos de ellos facilitan las comunicaciones de alto nivel entre módulos, especialmente aplicaciones independientes que necesitan permanecer independientes de la distribución principal de Perl.
En general, los componentes POE son procedimientos de alto nivel ya preparados que realizan tareas específicas de gran envergadura. Algunos ejemplos:
"Los componentes POE tienden a ser bibliotecas altamente reutilizables que manejan tareas tediosas,liberando a los programadores para que se concentren en cosas más interesantes.Sin embargo, esto debería ser cierto para cualquier biblioteca".