• Publicidad

Pasar parámetros a un package

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

Pasar parámetros a un package

Notapor Negrazo » 2011-03-13 18:44 @822

Hola a todos:

Resulta que hice una subrutina para hacer Paginación en reportes que estén algo grandes y me funciona bien, ya la probé en un reporte de 1500 registros y todo bien.

Ahora necesito hacer lo mismo para una pila de más o menos 100 reportes diferentes, por lo que hice un "package" con la dichosa subrutina y así poder llamarla desde todos mis reportes con mínimos cambios en ellos, pero ya le intenté por varias partes y no puedo mandarle los parámetros necesarios para que funcione.

¿Alguien tiene una referencia, o un ejemplo tal vez?

Cualquier ayuda es bienvenida.

Gracias.
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Publicidad

Re: Pasar parámetros a un package

Notapor explorer » 2011-03-13 18:49 @825

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: Pasar parámetros a un package

Notapor Negrazo » 2011-03-14 17:59 @790

Hola, explorer:

Pues ya vi la referencia que me indicaste y, honestamente, no entiendo nada. Yo lo único que necesito es enviar dos parámetros desde un script a un package llamado 'paginar.pl', donde la subrutina se llama Paginacion y lo estoy haciendo así:

paginar::Paginacion(dato1, dato2);

En el módulo o paquete 'paginar.pl' trato de imprimir las variables que recibo, y, pues no traen nada.

¿Qué estoy haciendo mal?

Porque de seguro me falta algo...

Saludos.
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Re: Pasar parámetros a un package

Notapor explorer » 2011-03-14 18:37 @817

¡Ah!, eso no es pasar parámetros a un package, sino ejecutar una de las funciones o métodos de ese paquete.

¿Qué error sale? ¿Has puesto use warnings para que Perl te ayude?

¿Cómo has hecho la importación del paquete en el programa? Si pudiéramos ver algo de código podríamos ayudarte más.

Hay varias formas de importar funciones en nuestro programa.

Este es una de ellas:

paginar.pl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. sub Paginacion {
  7.     print '[', join('][', @_), "]\n";
  8. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
programa.pl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. do 'paginar.pl';
  7.  
  8. Paginacion(1, 4, 5..9, 'solideo');
  9.  
  10. __END__
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: Pasar parámetros a un package

Notapor Negrazo » 2011-03-14 20:31 @896

Gracias por responder, explorer:

Aquí te envio el código de ambas partes:

paginar.pl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. package paginar;
  2.  
  3. $prog = "";
  4. $SESSION = "";
  5. $prev = 0;
  6. $next = 0;
  7. $ult = 0;
  8. $init = 0;
  9.  
  10. print "Content-type: text/html\n\n";
  11.  foreach  (@_ )
  12.    {
  13.      print $_;
  14.      if($i == 0)
  15.         { $prog = $_ ;  }
  16.      if($i == 1)
  17.         { $SESSION = $_ ;  }
  18.      if($i == 2)
  19.         { $prev = $_ ;  }
  20.      if($i == 3)
  21.         { $next = $_ ;  }
  22.      if($i == 4)
  23.         { $ult = $_ ;  }
  24.       $i++;
  25.     }
  26. #my $CGISESSID = param('CGISESSID');
  27.  
  28. sub Paginacion
  29. {
  30. if($init > 0) {
  31. print "<a href='$prog?CGISESSID=$CGISESSID&init=$prev '>\<</a>&nbsp;&nbsp;&nbsp;&nbsp;";
  32. print "<a href='$prog?CGISESSID=$CGISESSID&init=0 '>\<<</a>&nbsp;&nbsp;&nbsp;&nbsp;";
  33.    }
  34. if($init >= 0 and $init < $ult) {
  35. print "<a href='$prog?CGISESSID=$CGISESSID&init=$next '>\></a>&nbsp;&nbsp;&nbsp;&nbsp;";
  36. print "<a href='$prog?CGISESSID=$CGISESSID&init=$ult '>\>></a>&nbsp;&nbsp;&nbsp;&nbsp;";
  37.    }
  38. print "<a href='reportesinscs.pl?CGISESSID=$SESSION '>Salir</a>&nbsp;&nbsp;&nbsp;&nbsp;";
  39. }
  40. return 1;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Y aquí va el script que se llama alumxnameBis.pl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!\perl\bin
  2. # alumnos x nombre alumxnameBis.pl
  3. require 'paginar.pl';
  4. require 'connectDB.pl';
  5. use CGI::Carp qw(fatalsToBrowser);
  6. use DBI;
  7. use CGI qw(param uploadInfo);
  8. use CGI;
  9. use CGI ':standard';
  10. use CGI::Session;
  11. use Date::Simple ('date', 'today');
  12. use Date::Calc qw(:all);
  13.  
  14. my $dt = today();
  15. my @doc = "";
  16. my $countn = 0;
  17. my $con = "";
  18. my $cicloctrl = "";
  19.  
  20.  
  21. # grupo de variables para paging
  22. my $init = param('init');
  23. my $next = $init + 20;
  24. my $prev = $init - 20;
  25. my $i = $init + 1;
  26. my $ult = 0;
  27. my $entries = 20 ;
  28. my $rem = 0;
  29.  
  30. my $cgi = new CGI;
  31. my $CGISESSID = $cgi->param('CGISESSID');
  32. my $session =
  33.    CGI::Session->load("driver:File",$CGISESSID,{'Directory'=>'/temp/'})
  34.        or die CGI::Session->errstr;
  35.  
  36. print "Content-type: text/html\n\n";
  37. print "<p align='center'><img src='logo1.gif' border='0' name='banner' ></a><br></p>";
  38. print start_html(-title=>'Mapapi', -bgcolor=>'#ffffc6');
  39.  
  40. my $aut = $session->param('Aut01');
  41. if($aut eq '1' )
  42.   {
  43.  
  44. # Configurar el acceso a la DB
  45. $con = connectDB::Conn($m)
  46.   or die "No puedo conectarme  a la database\n";
  47.  
  48. my $sth1 = $con->prepare("SELECT  ciclo FROM control ");
  49. $sth1->execute()or die "No puedo leer Control....$!";
  50. my @doc1 = $sth1->fetchrow_array;
  51.   {
  52.   $cicloctrl = $doc1[0];
  53.        }
  54.  
  55. print basefont ({-face=>'Arial'});
  56. print "<H2 align='center'><B>Inscripciones y Alumnos</H2><h5 align='right'>Fecha:$dt</h5></B>";
  57.  
  58. print font ({-size=>'4',  -color=>'Red'},'Alumnos x Nombre');
  59. print "<BR>";
  60. # llamo al modulo paginar
  61. paginar::Paginacion('$prog','$SESSION','$prev','$next','$ult');
  62.  
  63. print "<TABLE align='right' border='3' >\n";
  64. print "<TR><th>Cont.</th><th>Codigo</th><th>Nombre</th><th>Ap.Paterno</th><th>Ap.Materno</th><th>Sexo</th><th>Fecha Nacim.</th><th>Sangre</th><th>Situacion</th><th>Grado</th><th>Grupo</th></TR>\n";
  65.  
  66. my $sth = $con->prepare(qq(SELECT codigo,nombre,paterno,materno,sexo,nacimiento,sangre,situacion,grado, grupo  FROM alumnos where status = 'Activo' and ciclo='$cicloctrl' order by nombre,paterno,materno limit $init, $entries));
  67.  
  68. $sth->execute() or die "Error en Alumnos...";
  69. while (@doc = $sth->fetchrow_array)
  70. {
  71.   print "<tr>";
  72.    print "<B><td>$i</td><td>$doc[0]</td><td>$doc[1]</td><td>$doc[2]</td><td>$doc[3]</td><td>$doc[4]</td><td>$doc[5]</td><td>$doc[6]</td><td>$doc[7]</td><td>$doc[8]</td><td>$doc[9]</td></B>";
  73.    print "</tr\n";
  74.    $i++;
  75.    $init;
  76.      }
  77.  
  78. print "</TABLE>\n";
  79. my $sth1 = $con->prepare(qq(SELECT count(*) as total FROM alumnos where status = 'Activo' and ciclo='$cicloctrl'  ));
  80. $sth1->execute() or die "Error en Alumnos...";
  81. @doc = $sth1->fetchrow_array;
  82. print "<B> Total de Alumnos ==> " . $doc[0] . "</B><BR>";
  83. print button(-name=>'back', -value=>'Atras', -onClick=>'history.go(-1)');
  84.  
  85.     }
  86. else
  87.    { print font ({-size=>'5',  -color=>'Red'},'No tienes autorizacion para esta opcion');
  88.      print "<BR>";
  89. print button(-name=>'back', -value=>'Atras', -onClick=>'history.go(-1)'); }
  90. $con->disconnect;
  91.  
  92. exit;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Como puedes ver es un simple script que lee registros de la tabla 'alumnos' en grupos de 20 ($entries), empezando con lo que traiga en la variable $init.

Al invocar a paginar.pl le agregué que me imprima las variables que estoy pasando y no me imprime nada en absoluto.

A ver si le encuentras dónde tengo la falla.

Gracias.
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Re: Pasar parámetros a un package

Notapor explorer » 2011-03-15 17:24 @767

En la subrutina Paginacion(), ¿en qué parte se leen los argumentos que le pasas después? Yo no lo veo...

Por otra parte, al principio del programa, hay un jaleo de carga de módulos. Debería ser algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use CGI          qw(param uploadInfo :standard);
  2. use CGI::Session;
  3. use CGI::Carp    qw(fatalsToBrowser);
  4. use Date::Simple qw(date today);
  5. use Date::Calc     ':all';
  6. use DBI;
  7.  
  8. require 'paginar.pl';
  9. require 'connectDB.pl';
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: Pasar parámetros a un package(Resuelto)

Notapor Negrazo » 2011-03-16 20:33 @898

Hola explorer:

Fijate que me puse a leer el asunto de las Referencias y las des-referencias y allí estaba la clave del asunto. Yo nunca había usado estas cosas, pero siempre hay una primera vez.

Simplemente metí todos los parámetros en un arreglo, luego hice una referencia a dicho arreglo y esa referencia fue la que envié en la petición de la subrutina paginar.pl.

Allá en la subrutina simplemente recibí la referencia y extraje el arreglo y por tanto los parámetros.

Ahora ya me funciona todo bien.

Gracias de nuevo.
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Re: Pasar parámetros a un package

Notapor explorer » 2011-03-16 20:39 @902

... y sin comentar que en la llamada a la función... las comillas simples son un error :)
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 Básico

¿Quién está conectado?

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