• Publicidad

Errores de sintaxis con 'strict'

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

Errores de sintaxis con 'strict'

Notapor visualfree » 2009-11-25 19:21 @848

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use DBI;
  4. $db="perl";
  5. $host="localhost";
  6. $port="3306";
  7. $userid="root";
  8. $passwd="miclave";
  9. $connectionInfo="DBI:mysql:database=$db;$host:$port";
  10. $dbh = DBI->connect($connectionInfo,$userid,$passwd);
  11. $query = "SELECT id_usuarios,nombre FROM usuarios";
  12. $sth = $dbh->prepare($query);
  13. $sth->execute();
  14. $sth->bind_columns(undef,$id_usuarios,$nombre);
  15. while($sth->fetch()) {
  16.     print "$id_usuarios - $nombre \n";
  17. }
  18. $sth->finish();
  19. $dbh->disconnect;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Me sale el siguiente error:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Global symbol "$db" requires explicit package name at mostrar.pl line 4.
Global symbol "$host" requires explicit package name at mostrar.pl line 5.
Global symbol "$port" requires explicit package name at mostrar.pl line 6.
Global symbol "$userid" requires explicit package name at mostrar.pl line 7.
Global symbol "$passwd" requires explicit package name at mostrar.pl line 8.
Global symbol "$connectionInfo" requires explicit package name at mostrar.pl line 9.
Global symbol "$db" requires explicit package name at mostrar.pl line 9.
Global symbol "$host" requires explicit package name at mostrar.pl line 9.
Global symbol "$port" requires explicit package name at mostrar.pl line 9.
Global symbol "$dbh" requires explicit package name at mostrar.pl line 10.
Global symbol "$connectionInfo" requires explicit package name at mostrar.pl line 10.
Global symbol "$userid" requires explicit package name at mostrar.pl line 10.
Global symbol "$passwd" requires explicit package name at mostrar.pl line 10.
Global symbol "$query" requires explicit package name at mostrar.pl line 11.
Global symbol "$sth" requires explicit package name at mostrar.pl line 12.
Global symbol "$dbh" requires explicit package name at mostrar.pl line 12.
Global symbol "$query" requires explicit package name at mostrar.pl line 12.
Global symbol "$sth" requires explicit package name at mostrar.pl line 13.
Global symbol "$sth" requires explicit package name at mostrar.pl line 14.
Global symbol "$id_usuarios" requires explicit package name at mostrar.pl line 14.
Global symbol "$nombre" requires explicit package name at mostrar.pl line 14.
Global symbol "$sth" requires explicit package name at mostrar.pl line 15.
Global symbol "$id_usuarios" requires explicit package name at mostrar.pl line 16.
Global symbol "$nombre" requires explicit package name at mostrar.pl line 16.
Global symbol "$sth" requires explicit package name at mostrar.pl line 18.
Global symbol "$dbh" requires explicit package name at mostrar.pl line 19.
Execution of mostrar.pl aborted due to compilation errors.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
visualfree
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-11-19 03:01 @167

Publicidad

Re: Ayuda Mysql + Perl+ DBI...

Notapor explorer » 2009-11-25 19:38 @860

El error Global symbol "$rows" requires explicit package name quiere decir que estás usando una variable que no ha sido declarada en ningún sitio.

Es uno de los efectos del use strict;: con él, estamos diciendo que nuestro programa está escrito (o debería estar escrito) de forma estricta. Eso implica, entre otras cosas, que todas las variables deben ser declaradas antes de ser usadas, bien de forma local con my() o de forma global con our() o importadas desde otros paquetes.

O quitas el 'use strict;'. Cualquiera de las dos formas te vale.

Quedaría así
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. use DBI;
  6.  
  7. my $db     = 'perl';
  8. my $host   = 'localhost';
  9. my $port   = 3306;
  10. my $userid = 'root';
  11. my $passwd = 'miclave';
  12.  
  13. my $connectionInfo = "DBI:mysql:database=$db;$host:$port";
  14.  
  15. my $dbh    = DBI->connect($connectionInfo, $userid, $passwd);
  16. my $query  = 'SELECT id_usuarios,nombre FROM usuarios';
  17. my $sth    = $dbh->prepare($query);
  18.  
  19. $sth->execute();
  20.  
  21. my($id_usuarios,$nombre);
  22. $sth->bind_columns(\$id_usuarios, \$nombre);
  23.  
  24. while ($sth->fetch()) {
  25.     print "$id_usuarios - $nombre \n";
  26. }
  27.  
  28. $sth->finish();
  29. $dbh->disconnect;
Coloreado en 0.002 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: Ayuda Mysql + Perl+ DBI...

Notapor visualfree » 2009-11-25 19:53 @870

Le quité el use strict;

Ahora sale esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
perl mostrar.pl
Can't DBI::st=HASH(0x92c8bd0)->bind_col(1, undef,...), need a reference to a scalar at /usr/lib/perl5/DBI.pm line 1867.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Y con tu código, explorer, me sale lo siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Global symbol "$id_usuarios" requires explicit package name at mostrar1.pl line 20.
Global symbol "$nombre" requires explicit package name at mostrar1.pl line 20.
Global symbol "$id_usuarios" requires explicit package name at mostrar1.pl line 23.
Global symbol "$nombre" requires explicit package name at mostrar1.pl line 23.
Execution of mostrar1.pl aborted due to compilation errors.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
visualfree
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-11-19 03:01 @167

Re: Ayuda Mysql + Perl+ DBI...

Notapor explorer » 2009-11-25 20:11 @882

Se nota que el código no tenía originalmente el use strict;, así que es normal que salgan avisos de variables no declaradas por todas partes.

Ya he cambiado el 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: Ayuda Mysql + Perl+ DBI...

Notapor visualfree » 2009-11-25 20:30 @895

Funciona, pero qué complicación :S.

Saludos y gracias.
visualfree
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-11-19 03:01 @167

Re: Ayuda Mysql + Perl+ DBI...

Notapor explorer » 2009-11-25 20:42 @904

Lo que no se entiende, es complicado.
Lo que se entiende, ya no importa tanto.
Lo que interesa, es lo que hay en medio: ganas de aprender.

:)
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: Ayuda Mysql + Perl+ DBI...

Notapor visualfree » 2009-11-26 00:18 @054

Me salió un nuevo problema en el camino. Ayuda, plz:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. use DBI;
  6.  
  7. my $db     = 'perl';
  8. my $host   = 'localhost';
  9. my $port   = 3306;
  10. my $userid = 'root';
  11. my $passwd = 'miclave';
  12.  
  13. my $connectionInfo = "DBI:mysql:database=$db;$host:$port";
  14.  
  15. my $dbh    = DBI->connect($connectionInfo, $userid, $passwd);
  16. my $query  = 'INSERT INTO usuarios(nombre,apellido,telefono,edad) VALUES('Pedro','Perez','212121','23')';
  17. my $sth    = $dbh->prepare($query);
  18.  
  19. $sth->execute();
  20.  
  21.  
  22. $sth->finish();
  23. $dbh->disconnect;
  24.                      
  25.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y me sale el siguiente error:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
perl mostrar2.pl
Bad name after Pedro' at mostrar2.pl line 16.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Saludos...
visualfree
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-11-19 03:01 @167

Re: Ayuda Mysql + Perl+ DBI...

Notapor explorer » 2009-11-26 05:35 @274

Estás intentando poner comillas simples dentro de un valor que ya estaba entrecomillado simple.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
'INSERT INTO usuarios (nombre,apellido,telefono,edad) VALUES ('Pedro','Perez','212121','23')';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Tienes varias opciones, como por ejemplo una, que sería "escapar" las comillas simples del interior, pero las más cómodas es jugar con el doble sistema de entrecomillado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
"INSERT INTO usuarios (nombre,apellido,telefono,edad) VALUES ('Pedro','Perez','212121','23')";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
'INSERT INTO usuarios (nombre,apellido,telefono,edad) VALUES ("Pedro","Perez","212121","23")';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
(aunque esta última quizás tengas problemas al pasárselo al motor de la base de datos).

Otra solución es usar la función de entrecomillar: q()
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
q(INSERT INTO usuarios (nombre,apellido,telefono,edad) VALUES ('Pedro','Perez','212121','23'));
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: Errores de sintaxis con 'strict'

Notapor visualfree » 2009-11-26 12:25 @559

Las comillas dobles por fuera y las simples por dentro funcionó de forma satisfactoria. Gracias nuevamente...
visualfree
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-11-19 03:01 @167

Re: Errores de sintaxis con 'strict'

Notapor explorer » 2009-11-26 12:31 @563

Bien...

Ahora, como deberes para casa, tendrás que explicarnos por qué no funcionaba antes y por qué funciona bien ahora... Debe existir alguna razón ;)
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

Siguiente

Volver a Básico

¿Quién está conectado?

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