• Publicidad

[RETO-CURIOSIDAD] Imprime el código del programa

Aprende Perl

[RETO-CURIOSIDAD] Imprime el código del programa

Notapor Aceitunas » 2014-11-08 13:05 @587

Bueno, pues el reto (que más que reto es curiosidad) consiste en hacer un programa que muestre su propio código fuente.

NOTA: El código más corto gana.
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Publicidad

Re: [RETO-CURIOSIDAD] Imprime el código del programa

Notapor explorer » 2014-11-08 14:38 @651

¿Vale usar módulos?

:D
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: [RETO-CURIOSIDAD] Imprime el código del programa

Notapor Aceitunas » 2014-11-08 14:40 @652

explorer escribiste:¿Vale usar módulos?

:D


Sí. :twisted:
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: [RETO-CURIOSIDAD] Imprime el código del programa

Notapor explorer » 2014-11-08 16:27 @727

Bueno, he encontrado dos soluciones. Dejaremos tiempo para que más gente participe.
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: [RETO-CURIOSIDAD] Imprime el código del programa

Notapor Aceitunas » 2014-11-09 12:59 @583

Yo tengo también un par de soluciones. :D
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: [RETO-CURIOSIDAD] Imprime el código del programa

Notapor explorer » 2014-11-09 16:04 @711

Bueno, la solución obvia es abrir el propio archivo, cuyo nombre está en $0, y luego imprimirlo por líneas... pero no es la única. Otras formas pueden ser la utilización de comandos externos (como cat), pero esa solución no es portátil.

Encontrar la solución más corta implica un conocimiento amplio de la sintaxis de Perl (y de alguna peculiaridad).
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: [RETO-CURIOSIDAD] Imprime el código del programa

Notapor Aceitunas » 2014-11-09 16:15 @718

Leyendo el archivo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open IN,$0;print<IN>;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Usando truquillo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $_ = q{$_ = q{ACEITUNAS};s/ACEITUNAS/$_/;print;};s/ACEITUNAS/$_/;print;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: [RETO-CURIOSIDAD] Imprime el código del programa

Notapor explorer » 2014-11-09 21:27 @936

En efecto, esa es la idea.

Lo que sí podemos es aprovecharnos de una característica muy extraña, en el momento del open(), que es que si le pasamos un gestor de archivo que coincida con el nombre de una variable, abrirá el archivo cuyo nombre esté en esa variable. Por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. our $ARCHIVO = 'texto.txt';
  2. ...
  3. open ARCHIVO;   # abre 'texto.txt' en modo lectura
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Entonces, si $0 contiene el nombre del programa actual, podemos hacer
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. open+0;print<0>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

En cuanto a módulos, hay uno especializado en hacer esto: Quine. Su nombre viene de que precisamente se llaman así a los programas que hacen esa tarea.

Un ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use Quine;
  3. 1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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: [RETO-CURIOSIDAD] Imprime el código del programa

Notapor Aceitunas » 2014-11-10 06:23 @308

¡Ja, ja, ja! ¡Cómo me engancha Perl!

Sabía que esto se llamaba Quine, pero si lo ponía le quitaba gracia al asunto. :lol:

He estado mirando el módulo y también lee el archivo.
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: [RETO-CURIOSIDAD] Imprime el código del programa

Notapor salva » 2014-11-11 05:07 @255

El script más pequeño que saca por pantalla su código al ejecutarlo es el siguiente:



O sea, ¡¡¡un fichero vacío!!!
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680


Volver a Formación

¿Quién está conectado?

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