• Publicidad

Ejecutar un programa en el navegador

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Ejecutar un programa en el navegador

Notapor ManuelPerl » 2013-08-31 20:16 @886

Un saludo.

Es una tontería a lo mejor lo que voy a preguntar, pero es que estoy empezando, y no sé la razón de por qué no sale igual que en consola.

Tengo un script de Perl que lo ejecuto en la consola de shell y funciona perfectamente, el menú sale bien y suma los números bien, pero sin embargo, cuando lo meto en la carpeta del Apache, en este caso sería localhost:8080/programas/suma.pl, sale el menú, pero sale todo junto, pero no funciona, no puedo introducir los números para la suma o la resta. Es como si al ejecutarlo en el navegador, esos menús no funcionasen ahí.

A continuación pongo el código. A ver si podéis darme alguna orientación. Gracias.

#!"C:\xampp\perl\bin\perl.exe"

print "content-type: text/html \n\n";

print "Que quiere hacer ahora?\n";
print "1- Mostrar archivos \n";
print "2- Sumar \n";
print "3- Restar \n";
print "4- Multiplicar \n";
print "5- Dividir \n";
print "Eliga un numero.\n";
$or1=<stdin>; chomp($or1);
if ($or1 eq "1")
{
system(dir);
<stdin>;
}


elsif ($or1 eq "2")
{
print "Escribe los numeros \n";
$n2=<stdin>;
print "Escribe otro numero \n";
$n3=<stdin>;
print "El resultado es : $n2 + $n3";
<stdin>;
}
elsif ($or1 eq "3")
{
print "Escribe los numeros \n";
$n4=<stdin>;
print "Escribe otro numero \n";
$n5=<stdin>;
print $n4 - $n5;
<stdin>;
}
elsif ($or1 eq "4")
{
print "Escribe los numeros \n";
$n6=<stdin>;
print "Escribe otro numero \n";
$n7=<stdin>;
print $n6 * $n7;
<stdin>;
}
elsif ($or1 eq "5")
{
print "Escribe los numeros \n";
$n8=<stdin>;
print "Escribe otro numero \n";
$n9=<stdin>;
print $n8 % $n9;
<stdin>;
}
ManuelPerl
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2011-06-21 16:23 @724

Publicidad

Re: Ejecutar un programa en el navegador

Notapor explorer » 2013-08-31 22:23 @974

El programa que has escrito es interactivo. Quiere decir que el programa va ejecutando las sentencias, una tras otra, y entre ellas hay algunas que le dicen que debe esperar a leer un dato desde la entrada estándar (normalmente el teclado), para luego procesar esa entrada y dar una salida (por la salida estándar, que suele ser la pantalla o consola).

El problema es que el entorno web no es interactivo. Aunque hoy en día veamos páginas web que parecen que interactúan de forma inmediata con el usuario, lo consiguen por medio de una enorme cantidad de bibliotecas, líneas de código y protocolos. Pero lo básico es que se trata de un proceso cliente-servidor (un cliente solicita un servicio a un servidor, éste se lo da, y termina la conexión).

Cuando ejecutas un programa como tú lo has hecho, estamos entrando en lo que se llama el protocolo CGI.

El protocolo CGI, de forma muy básica, es:
  • el navegador del usuario solicita un recurso (es cuando escribes la URL en la casilla de dirección y le pides al navegador que se conecte al servidor web)
  • en el servidor, éste se da cuenta de que se trata de un ejecutable Perl
  • el servidor arranca el proceso Perl, y se queda esperando todo lo que el programa le devuelva por la salida estándar
  • todo lo que el programa entregue por la salida estándar, el servidor web lo conduce hacia el navegador del usuario
Como ves, aquí no cabe el caso de tu programa: no puede pararse para recibir información del usuario. Debe entregar lo que pueda al servidor web, y salir inmediatamente.

La razón por la que te sale "todo junto", es que estás indicando, en la línea del 'Content-type', al servidor web, que lo que vas a enviar al navegador del usuario, es un archivo o flujo de caracteres (texto -text-) con formato HTML. Pero... resulta que no lo haces. Estás enviado sólo texto sencillo, sin ningún marcado HTML. Cuando ese texto llega al navegador, éste no sabe cómo representarlo más que como un simple flujo de texto..

La forma de interactuar con el usuario, muy básica, sería usando un formulario HTML, donde el usuario pondría los argumentos a procesar. Luego, un selector escogería la operación a realizar. Y finalmente, un botón de envío. Tu programa recibiría por la entrada estándar toda esta información, la procesaría, y devolvería el resultado (también en formato HTML), al usuario.

Así que tienes que aprender varias cosas... HTML (lo básico para crear contenido en ese formato), CGI (en Perl existe el módulo CGI que facilita mucho la tarea), un poco de cómo funciona el protocolo HTTP (nunca está demás), y las particularidades de los formularios en HTML.

Por estos foros hay muchos ejemplos de programas Perl que siguen el protocolo CGI (normalmente se les llama cgi). Incluso hay un foro especializado en el tema (Web). Aquí tienes un ejemplo de un CGI mínimo. Toda la complejidad de: leer los parámetros desde la entrada estándar, generar la respuesta en formato HTML, acordarse de mandar la cabecera HTTP correcta... de todo ello se encarga el módulo CGI, por lo que podemos hacer programas sencillos escribiendo poco código.
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 un programa en el navegador

Notapor ManuelPerl » 2013-09-01 06:58 @332

Gracias, explorer, me has dado una respuesta muy amplia, y con los enlaces que me has dejado ahí, tengo material para seguir estudiando y investigar.
ManuelPerl
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2011-06-21 16:23 @724


Volver a Básico

¿Quién está conectado?

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