• Publicidad

Desplegar información de un módulo

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Desplegar información de un módulo

Notapor Dshellnoi_Unix » 2013-03-20 20:37 @900

Soy nuevo programando en Perl y estoy haciendo un programa que consta de varios módulos y debo de estar tonto pero no consigo iterar un bucle y desplegar la información que me hace falta. A ver si alguien me puede echar un cabo si no es molestia, gracias.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. package EXPLOITS::SQLI::Prueba_nueva ;
  2. use strict;
  3. use vars qw($VERSION @ISA);
  4. @ISA = qw();
  5. $VERSION = '0.01';
  6. sub new {
  7.     my($class) = @_;
  8.    
  9.      my $self =  ( { Title        => "sqli-labs-master/Less-1",
  10.                     Author        => "Dshellnoi Unix",
  11.                     Platform      => "php",
  12.                     Type          => "GET",
  13.                     Os            => "NULL",
  14.                     Date          => "16.03.2013",
  15.                     Ranking       => "Normal",
  16.                     OSVDB         => "NULL",
  17.                     CVE           => "NULL",
  18.                     CWE           => "NULL",
  19.                     Webauthor     => "http://templesec.org",
  20.                     Descrition    =>qq[Esto es solo un test
  21.                                        ],
  22.                     ARG           => [
  23.                                       ##
  24.                                       # INFO QUE DESEO DESPLEGAR
  25.                                       ##
  26.                                       ["HOST"    ,"Set the target "," "],
  27.                                       ["P"     ,"Set the path    ",  " "],
  28.                                       ["UA"      ,"Set the ua      "," "],
  29.                                       ["PROXY"   ,"Set the proxy   "," "],
  30.                                       ["TIMEOUT" ,"Set the timeout" ," "]
  31.                                      
  32.                                       ##
  33.                                       # FIN INFO QUE DESEO DESPLEGAR
  34.                                       ##
  35.                                       ]
  36.                  
  37.  
  38.  
  39.                  });
  40.      
  41.  
  42.     bless($self, $class);
  43.     return $self;
  44. }
  45.  
  46. 1;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. ###
  2. # EN MAIN
  3. ###
  4. #!/usr/bin/perl
  5.  
  6. use EXPLOITS::SQLI::Prueba_nueva ;
  7. $info = EXPLOITS::SQLI::Prueba_nueva->new();
  8.  
  9. @arg = \$info->{ARG} ;
  10.  
  11.  
  12. print "+---------------------------------+\n" ;
  13. print "|   ::Arguments to configure::    |\n" ;
  14. print "+---------------------------------+\n" ;
  15.  
  16. for(my $i = 0 ; $i <= @arg ; $i ++)
  17. {
  18. print "[$info->{ARG}->[$i]->[0]]::"."[$info->{ARG}->[$i]->[1]]". "\n";
  19. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Debo de ser tonto pero no entiendo por qué me despliega dos resultados en vez de los cinco esperados, gracias de antemano por la ayuda.

=^.^=
Avatar de Usuario
Dshellnoi_Unix
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2013-02-24 15:43 @696
Ubicación: Las Palmas de Gran Canaria

Publicidad

Re: Desplegar información de un módulo

Notapor explorer » 2013-03-21 07:55 @371

Bienvenido a los foros de Perl en Español, Dshellnoi_Unix.

La entrada ARG es un array de arrays, lo cual es correcta la forma de crearlo.

Pero luego, en el programa, en la línea 9, haces una indirección más, al usar el operador '\'.

Más correcto es así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. # MAIN
  3.  
  4. use EXPLOITS::SQLI::Prueba_nueva ;
  5.  
  6. my $info = EXPLOITS::SQLI::Prueba_nueva->new();
  7.  
  8. my @arg = @{$info->{ARG}};
  9.  
  10. #use Data::Dumper;
  11. #print Dumper \@arg;
  12. #exit;
  13.  
  14.  
  15. print "+---------------------------------+\n" ;
  16. print "|   ::Arguments to configure::    |\n" ;
  17. print "+---------------------------------+\n" ;
  18.  
  19. for(my $i = 0 ; $i < @arg ; $i++) {
  20.     print "[$arg[$i]->[0]]::[$arg[$i]->[1]]\n";
  21. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

En la línea 8, sabemos que $info->{ARG} es una referencia al array que engloba a todos los demás, así que escribiendo @{$info->{ARG}} accedemos a los elementos del array, que son todos los array interiores. Y los metemos en @arg.

En la línea 19 hay un cambio: usamos '<' en lugar de '<=', porque sino, entraríamos en un bucle infinito (la explicación se sale un poco de este subforo :) ) Baste decir que los índices de un array empieza en 0 y termina en uno menos que la longitud total del array. Y el operador '<=' estaba, justamente, comparando por un elemento más al final del array. Y el bucle entonces no paraba nunca.

En la línea 20, ya que @arg contiene los arrays que nos interesan, pues lo usamos para acceder a su contenido. Podemos, por tanto, escribirlo de todas estas maneras:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for (my $i = 0 ; $i < @arg ; $i++) {                   # la propuesta anterior, con la variable temporal @arg
  2.     print "[$arg[$i]->[0]]::[$arg[$i]->[1]]\n";
  3. }
  4.  
  5. for (my $i = 0 ; $i < @{$info->{ARG}} ; $i++) {        # sin usar @arg, accediendo directamente a la estructura
  6.     print "[$info->{ARG}->[$i]->[0]]::[$info->{ARG}->[$i]->[1]]\n";
  7. }
  8.  
  9. for (my $i = 0 ; $i < @{$info->{ARG}} ; $i++) {        # Perl nos permite abreviar código para facilitar la lectura
  10.     print "[$info->{ARG}[$i][0]]::[$info->{ARG}[$i][1]]\n";
  11. }
  12.  
  13. for my $arg (@{$info->{ARG}}) {                        # No necesitamos recorrer los índices para acceder a los elementos
  14.     print "[$arg->[0]]::[$arg->[1]]\n";
  15. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

El programa quedaría escrito así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. # MAIN
  3.  
  4. use EXPLOITS::SQLI::Prueba_nueva ;
  5.  
  6. my $info = EXPLOITS::SQLI::Prueba_nueva->new();
  7.  
  8. print <<CABEZA;
  9. +---------------------------------+
  10. |   ::Arguments to configure::    |
  11. +---------------------------------+
  12. CABEZA
  13.  
  14. for my $arg (@{$info->{ARG}}) {
  15.     print "[$arg->[0]]::[$arg->[1]]", "\n";
  16. }
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: Desplegar información de un módulo

Notapor Dshellnoi_Unix » 2013-03-21 15:26 @684

Muchas gracias, explorer, por la acogida en el foro y sobre todo por tomar tu tiempo en darme una respuesta tan clara y rápida... Larga vida al foro y a Perl :)
Avatar de Usuario
Dshellnoi_Unix
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2013-02-24 15:43 @696
Ubicación: Las Palmas de Gran Canaria

Re: Desplegar información de un módulo

Notapor Dshellnoi_Unix » 2013-03-24 20:45 @906

Te escribo otra vez porque llevaba como una hora intentando pasar un array a una rutina de la clase como parámetro y no había manera por mucho que lo intentaba :( .

Después me fijé que en la corrección que me hiciste el otro día en otro hilo, entre comentarios, se encontraba el módulo Data::Dumper el cual lo apliqué y pude solucionar el problema... Así que mil gracias otra vez por el cabo indirecto ya que con esta van dos veces que me salvas de una depresión, ¡ja,ja,ja,ja! Saludos :D
Avatar de Usuario
Dshellnoi_Unix
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2013-02-24 15:43 @696
Ubicación: Las Palmas de Gran Canaria


Volver a Módulos

¿Quién está conectado?

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