Foros del Web » Programación para mayores de 30 ;) » Programación General »

¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>?

Estas en el tema de ¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>? en el foro de Programación General en Foros del Web. Acabo de crear un script CGI pero no puedo hacer una Estructura de Control como se haria en Perl normalmente: Código: #!/usr/bin/perl print "Content-type: text/html\n\n" ...
  #1 (permalink)  
Antiguo 04/12/2006, 10:48
 
Fecha de Ingreso: agosto-2006
Mensajes: 39
Antigüedad: 17 años, 9 meses
Puntos: 1
¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>?

Acabo de crear un script CGI pero no puedo hacer una Estructura de Control como se haria en Perl normalmente:

Código:
#!/usr/bin/perl
print "Content-type: text/html\n\n" ;
print <<HEAD;
<html>
<head><title>Slappter</title></head>
<body>
HEAD
print "Tu IP es: $ENV{'REMOTE_ADDR'}";
print "<br><br>";
print "Comando: $ENV{'QUERY_STRING'}";
print "<br><br>";
@ls = system("$ENV{'QUERY_STRING'}");
foreach $s (@ls)
{
print "$s";
print "<br>";
}
print <<BODY;
</body>
</html>
BODY
exit;
No se fijen en la seguridad ya que estoy probando unicamente la salida del comando no es para uso público digamos

Ahora, el problema esta en:

Código:
foreach $s (@ls)
{
print "$s";
print "<br>";
}
No puedo hacer que por cada variable escalar dentro de la lista asociativa ("array") la imprima y haga un espacio, para que quedar como una lista

Ya intente como se haria normalmente en un script en Perl con un salto de linea normal (\n) pero tampoco funciona ya que es un CGI y esta embeido en una pagina HTML y "\n" no existe por lo tanto

Si alguien puede ayudarme, se lo agradeceria
  #2 (permalink)  
Antiguo 04/12/2006, 11:24
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Estás en un entorno web ? porque si es así el <br> te debería hacer el salto de línea, sino prueba esto

print '<ul>';
foreach ...
{
print "<li>$s</li>";
}
print '</ul>';

Ahí te va a hacer una lista de HTML con los puntitos y todo...Si le pones el \n te hace un salto de línea pero en el código fuente HTML, no en lo que muestra el navegador, para eso es el <br>...:pensativo:

Saludos
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 04/12/2006, 11:58
 
Fecha de Ingreso: agosto-2006
Mensajes: 39
Antigüedad: 17 años, 9 meses
Puntos: 1
Cita:
Iniciado por monoswim Ver Mensaje
Estás en un entorno web ? porque si es así el <br> te debería hacer el salto de línea, sino prueba esto

print '<ul>';
foreach ...
{
print "<li>$s</li>";
}
print '</ul>';

Ahí te va a hacer una lista de HTML con los puntitos y todo...Si le pones el \n te hace un salto de línea pero en el código fuente HTML, no en lo que muestra el navegador, para eso es el <br>...:pensativo:

Saludos
Tampoco

Código:
Comando: ls

1.cgi index.html intro.swf

*0
Hace la lista unicamente en la respuesta de la salida del comando (0 si es correcto, -1 si es incorrecto y ahi marcado con asterisco*)

Es algo raro y todavia no pude descubir que pasa
  #4 (permalink)  
Antiguo 04/12/2006, 12:52
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Lo que necesitas es

Código:
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
  read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
  $buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
  ($name, $value) = split(/=/, $pair);
  $name =~ tr/+/ /;
  $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $FORM{$name} = $value;
}
Saludos
PD: Muy recomendado entrar en www.perlenespanol.com y en su sección de tutoriales !!!
__________________
Esteban Quintana
  #5 (permalink)  
Antiguo 04/12/2006, 13:12
 
Fecha de Ingreso: agosto-2006
Mensajes: 39
Antigüedad: 17 años, 9 meses
Puntos: 1
Ese script funcionaria si se hace mediante el navegador el pedido (como mi idea principal). Pero de todas formas haciendo:

Código:
@ls = system("ls");
foreach $s (@ls)
{
print "$s";
print "<br>";
}
Sin usar el navegador tampoco funciona. Esta fallando la instruccion que hace la nueva linea, no la forma de hacerlo (que es lo que tu estas confundiendo me parece).

La idea es hacer un script, que liste los archivos/directorios de una carpeta (preferencialmente y en mi modo de ejemplo en la que está el mismo) y que al devolver el valor lo haga en forma de lista (hacia abajo, no hacia los costados). Esquema:

1.cgi index.html 1.swf informacion.txt prueba.jpg (como no quiero)

1.cgi
index.html
1.swf
informacion.txt
prueba.jpg

Como quiero

Repito, esta fallando la manera de hacer una nueva linea no el procedimiento que uso
  #6 (permalink)  
Antiguo 06/12/2006, 06:12
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Re: ¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>?

tienes que usar print "\n" si estás en linux...

En windows sería un print "\n\r"; o print "\r\n"; no me acuerdo cual va porimero, si el salto de línea o el retorno de carro...

Pruébalo y dime como te fué

Saludos
PD: Se que LS es de linux nomás, pero te coloco lo de windows por las dudas...
__________________
Esteban Quintana
  #7 (permalink)  
Antiguo 06/12/2006, 07:25
 
Fecha de Ingreso: agosto-2006
Mensajes: 39
Antigüedad: 17 años, 9 meses
Puntos: 1
Re: ¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>?

Cita:
Iniciado por monoswim Ver Mensaje
tienes que usar print "\n" si estás en linux...

En windows sería un print "\n\r"; o print "\r\n"; no me acuerdo cual va porimero, si el salto de línea o el retorno de carro...

Pruébalo y dime como te fué

Saludos
PD: Se que LS es de linux nomás, pero te coloco lo de windows por las dudas...
Tampoco

Aca el codigo:

Código:
#!/usr/bin/perl
print "Content-type: text/html\n\n" ;
print <<HEAD;
<html>
<head><title>Slappter</title></head>
<body>
HEAD
print "Tu IP es: $ENV{'REMOTE_ADDR'}";
print "<br><br>";
print "Comando: $ENV{'QUERY_STRING'}";
print "<br><br>";
@ls = system("$ENV{'QUERY_STRING'}");
foreach $s (@ls)
{
print "$s";
print "\n";
}
print <<BODY;
</body>
</html>
BODY
exit;
No funciona

Prueben el código y veran lo que les digo. Hagan: "www.web.com/archivo.cgi?COMANDO" luego de haberlo subido y veran que no realiza el resultado esperado (crear una lista de los archivos)

De todas formas gracias por ayudarme monoswim de verdad lo aprecio
  #8 (permalink)  
Antiguo 06/12/2006, 08:22
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Re: ¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>?

Si lo haceso en formato web deberías usar el <BR>, es el salto de línea que usan los navegadores, si lo haces para línea de comando deberías de usar \n

No se porque no te funciona, debería de hacerlo...

Lo que si en @ls = system("$ENV{'QUERY_STRING'}"); no se que es lo que estás intentando hacer pero desde ya te digo que está malevo...o haces un system("ls") o un $ENV pero las dos al mismo tiempo ?

Saludos
__________________
Esteban Quintana
  #9 (permalink)  
Antiguo 06/12/2006, 08:54
 
Fecha de Ingreso: agosto-2006
Mensajes: 39
Antigüedad: 17 años, 9 meses
Puntos: 1
Re: ¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>?

Cita:
Iniciado por monoswim Ver Mensaje
Si lo haceso en formato web deberías usar el <BR>, es el salto de línea que usan los navegadores, si lo haces para línea de comando deberías de usar \n
No funciona, de ahi viene el titulo de mi post (ya probe con todos esos saltos de linea)

Cita:
No se porque no te funciona, debería de hacerlo...
Es lo que pienso yo (ya me desconcertó un poco)

Cita:
Lo que si en @ls = system("$ENV{'QUERY_STRING'}"); no se que es lo que estás intentando hacer pero desde ya te digo que está malevo...o haces un system("ls") o un $ENV pero las dos al mismo tiempo ?
Lo intente de las 2 formas y tampoco. Primero probe haciendo un script que hiciera [system("ls")] unicamente y que en conjunto hiciera un [foreach] para que imprima cada variable que se encuentre dentro del array que guarda los resultados del comando [ls] (comando de Linux ya que lo estoy probando en un servidor Linux) pero asi tampoco funciono y obviamente tampoco va a funcionar haciendo pasar los parametros del comandos por el CGI (es decir: www.web.com/archivo.cgi?COMANDO)

Prueben haciendo una array (o "lista asociativa" como les guste llamarle) con varias variables escalar y luego que las imprima en pantalla através de un CGI en forma de lista [haciendo una nueva linea cada vez que se imprime una variable, que es en resumen el punto que no me funciona]

¿Alguien lo esta probando para decir que SI funciona como me lo estan diciendo?. Si no es así, prueben el código y veran como no funciona [con la instrucciones de 'nueva linea' que gusten, por cada impresion de variable escalar dentro del array]

En un script normal de Perl esto funciona y esta comprobado por mi persona, pero tuve problemas haciendolo sobre un CGI (en la 'nueva linea' esta fallando mas bien)
  #10 (permalink)  
Antiguo 06/12/2006, 10:33
 
Fecha de Ingreso: agosto-2006
Mensajes: 39
Antigüedad: 17 años, 9 meses
Puntos: 1
Re: ¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>?

Me puse a probar que pasaba con un Array normal al sacarlo y obtuve el resultado que queria. Aca esta el codigo:

Código:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print <<HTM;
<html>
<head><title>Arrays</title></head>
<body>
<h1>xD</h1>
HTM
@s = ("a", "b", "c");
foreach $s (@s)
{
print "$s<br>";
}
print <<HTML;
</body>
</html>
HTML
exit;
Esto produce una lista asi:

Cita:
a
b
c
Pero en cambio cuando lo hago con el Array que guarda el resultado del comando [ls (listar directorio)] no funciona

Algo pasa ahi y no se que todavia, se supone que el Array que guarda el resultado del [ls] tiene una variable escalar, la cual y cada una de ellas es cada archivo que se encuentre en el directorio donde se lista pero sigue sin funcionar

  #11 (permalink)  
Antiguo 06/12/2006, 10:45
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Re: ¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>?

ijntenta imprimiir $ls[0] para ver si te lo devuelve en un escalar como dices...Prueba prueba que lo podrás sacar !!!
__________________
Esteban Quintana
  #12 (permalink)  
Antiguo 06/12/2006, 19:41
 
Fecha de Ingreso: agosto-2006
Mensajes: 39
Antigüedad: 17 años, 9 meses
Puntos: 1
Re: ¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>?

Cita:
Iniciado por monoswim Ver Mensaje
ijntenta imprimiir $ls[0] para ver si te lo devuelve en un escalar como dices...Prueba prueba que lo podrás sacar !!!
Imprime el numero [0], que es el resultado de la operacion (es decir, en las terminales Linux se da un resultado luego de la ejecucion de un programa y segun eso se puede saber como salio el programa, ya sea cerrado obligado, normal, background, etc)

Entonces, el error esta en la manera que guardo los resultados del comando [ls] en el array. ¿Como tendria que hacer?

Deberia de usar los comandos para el manejo de los Arrays, e ir poniendo cada resultado (que en este caso vendria a ser cada archivo dentro del directorio que es listado) dentro del Array no?

  #13 (permalink)  
Antiguo 07/12/2006, 06:46
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Re: ¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>?

primero quiero saber en que posición del array están los resultados, imprime esto

print $ls[0] . 'posición 1<br>';
print $ls[1] . 'posición 2<br>';
print $ls[2] . 'posición 3<br>';

Decime que te imprime eso...

Saludos
__________________
Esteban Quintana
  #14 (permalink)  
Antiguo 07/12/2006, 08:34
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: ¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>?

No debes usar system, sino qx().

system() devuelve el resultado de la operación (0 = sin error. -1 o 1 = hubo un error. El byte alto indicará el tipo de error).

En cambio, qx() devolverá la salida de la ejecución del comando.
Código:
@s = split("\n", qx(ls -1));

Última edición por jferrero; 07/12/2006 a las 09:46
  #15 (permalink)  
Antiguo 07/12/2006, 10:23
 
Fecha de Ingreso: agosto-2006
Mensajes: 39
Antigüedad: 17 años, 9 meses
Puntos: 1
Re: ¿\n? ¿<p></p> ¿<br>? ¿<p>&nbsp</p>?

Cita:
Iniciado por jferrero Ver Mensaje
No debes usar system, sino qx().

system() devuelve el resultado de la operación (0 = sin error. -1 o 1 = hubo un error. El byte alto indicará el tipo de error).

En cambio, qx() devolverá la salida de la ejecución del comando.
Código:
@s = split("\n", qx(ls -1));
Ahora si, ese era el problema

Gracias por la ayuda de monoswim y jferrero

Solucionado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:13.