• Publicidad

Ejecutar scripts de Perl dentro de otros

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Ejecutar scripts de Perl dentro de otros

Notapor Blue_Shell » 2017-04-21 09:39 @444

Hola de nuevo, perleros (no se me ocurría cómo llamar a los usuarios del foro, así que si no os importa...).

Hoy me hallaba programando en el maravilloso Sublime Text mi prototipo de shell en Linux y me encontré con un problema: El programa tiene funciones "built-in" como mkdir, ls y cd que ya he programado, pero el script queda muy largo y lioso de entender, aún comentando correctamente, así que se me ocurrió...

¿Puedo crear varios archivos en una carpeta llamada "builtin" en la carpeta del programa, y que cada vez que llame a, por ejemplo, mkdir, ejecute un .pl que contenga esas órdenes? He leído algo de .pm, packages y demás dolores de cabeza, y se me hace muy difícil entenderlo. Si alguien me lo explicara o me diera un código de ejemplo de cómo hacerlo estaría muy contento.

Ejemplo de lo que quería hacer:
Script de la shell:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  # Continúa por aquí y por abajo, solo es un ejemplo
  2. elsif ($CMD eq "#Mkdir") {
  3.         print "Choose a name for the new folder, and a mask separated by a comma if you want (by omision is 0777)Ej='Folder,0475'\n";
  4.         print color('red');
  5.         print "[Mkdir]>> " ;
  6.         print color('reset') ;
  7.         my $MkdiR = <STDIN> ;
  8.         chomp $MkdiR ;
  9.         mkdir $MkdiR or die "Folder cannot be created: $!\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Como planearía que quedara:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. elsif ($CMD eq "#Mkdir") {
  2.     call $SH_PATH/builtin/mkdir.pl #de existir call para este propósito
  3. }
  4.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Teniendo mkdir.pl las ordenes que tiene el script 1 en esa sección.

Un saludo y ¡gracias por adelantado!
Blue_Shell
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2017-04-20 10:41 @487

Publicidad

Re: Ejecutar scripts de Perl dentro de otros

Notapor explorer » 2017-04-21 10:27 @477

Puedes usar la función do():

do "$SH_PATH/builtin/mkdir.pl";

Más información en tu ordenador, con perldoc -f do Traducido al español

De todas maneras, lo lógico es usar módulos externos, que incorporan su código al principal en tiempo de compilación. Usar do() ejecuta un proceso completo de búsqueda, lectura, interpretación, compilación y ejecución. Para cosas sencillas, el usuario no se dará cuenta, pero si son cálculos muy complejos, sí que se notará en el sistema.

La definición básica de lo que es un módulo está aquí:
https://metacpan.org/pod/distribution/P ... dulos-Perl

En estos foros hay varios ejemplos. Aquí tienes uno sencillo para que veas lo fácil que puede ser:
acceso-a-hash-desde-modulo-t8977.html?hilit=m%C3%B3dulo#p38635

Es cuestión de poner el package, poner código que queremos que se ejecute al principio (en el arranque del programa), o dentro de sub{} si queremos que se ejecute como una llamada desde el programa. Y terminar el módulo con un sencillo 1; Y en el programa principal, pones un 'use módulo;', y ya puedes llamar a las subrutinas que hay dentro del módulo.

Por ejemplo, si tenemos un módulo Dir.pm dentro de builtin/, entonces debemos importarlo antes con use builtin::Dir;. Si dentro hay una subrutina llamada MkDir() podemos llamarla escribiendo Dir::MkDir()
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ejecutar scripts de Perl dentro de otros

Notapor Blue_Shell » 2017-04-21 10:37 @484

Gracias de nuevo, explorer, me pongo a intentarlo y conseguirlo ahora mismo.
Blue_Shell
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2017-04-20 10:41 @487

Re: Ejecutar scripts de Perl dentro de otros

Notapor explorer » 2017-04-21 11:02 @501

A propósito de este tema: hay un proyecto parecido, desde hace años: Perl Power Tools

Está publicado en CPAN: PerlPowerTools. Se puede consultar el código fuente ahí, o en GitHub: https://github.com/briandfoy/PerlPowerTools
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron