• Publicidad

Importar constante desde otro package

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

Importar constante desde otro package

Notapor jon1337 » 2020-03-28 06:31 @313

Buenas, ando intentando importar el token de otro archivo pero me dice que ese paquete no lo tengo instalado. No sé si en algún sitio tengo que poner la ruta o algo.

Los dos archivos los tengo en el mismo directorio.

Este es el código del pm:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. package Auth;
  2. use strict;
  3. use warnings;
  4.  
  5. use base 'Exporter';
  6.  
  7. use constant TOKEN => 'El token';
  8.  
  9. our @EXPORT_OK = ('TOKEN');
  10.  
  11. 1;
  12.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Aquí el código del pl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2.  
  3. use strict;
  4. use warnings;
  5. use WWW::Telegram::BotAPI;
  6. use Auth 'TOKEN';
  7.  
  8. my $api = WWW::Telegram::BotAPI->new(
  9.     token => TOKEN;
  10. );
  11. print $api->getMe->{result}{username};
  12.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y me sale el siguiente error:

Can't locate Auth.pm in @INC (you may need to install the Auth module) (@INC contains: /usr/lib
/perl5/5.30/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/5.30/vendor_perl /usr/share/per
l5/vendor_perl /usr/lib/perl5/5.30/core_perl /usr/share/perl5/core_perl) at bot.pl line 6.
BEGIN failed--compilation aborted at bot.pl line 6.
jon1337
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2020-01-05 06:20 @306

Publicidad

Re: Importar constante desde otro package

Notapor explorer » 2020-03-28 10:35 @483

A partir de una versión reciente de Perl, se ha "sacado" de las rutas de @INC (las rutas por donde va a buscar Perl a los módulos que queremos importar) la ruta del directorio donde nos encontramos.

Veo que estás usando Perl v5.30, así que seguro que ese es el problema.

En un Perl v5.18.2 que tengo en casa, si ejecuto el comando perl -V, esto es lo que sale al final:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  @INC:
    /etc/perl
    /usr/local/lib/perl/5.18.2
    /usr/local/share/perl/5.18.2
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.18
    /usr/share/perl/5.18
    /usr/local/lib/site_perl
    .
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Pero si lo hago con un Perl v5.24.1, sale esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  @INC:
    /etc/perl
    /usr/local/lib/x86_64-linux-gnu/perl/5.24.1
    /usr/local/share/perl/5.24.1
    /usr/lib/x86_64-linux-gnu/perl5/5.24
    /usr/share/perl5
    /usr/lib/x86_64-linux-gnu/perl/5.24
    /usr/share/perl/5.24
    /usr/local/lib/site_perl
    /usr/lib/x86_64-linux-gnu/perl-base
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Observa las diferencias: aparte del número de versión y de algún directorio más o menos, en el Perl más moderno falta el directorio ".", que es el que marca el directorio actual.

Lo que tienes que hacer es: insertar la línea
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use lib ".";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
antes de la importación de módulos que residan en tu directorio. O bien pones ".", o la ruta (absoluta o relativa) en donde se encuentra.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Importar constante desde otro package

Notapor jon1337 » 2020-03-28 13:00 @583

Perfecto, explorer, muchas gracias. Ahora consigo importarlo.

Pero ahora me da el siguiente error, y poniéndolo explicitamente el token no da el error, mirando con el depurador tiene el valor y llega bien.

syntax error at bot.pl line 11, near "TOKEN;"
Global symbol "$api" requires explicit package name (did you forget to declare "my $api"?) at bot.pl line 13.
Execution of bot.pl aborted due to compilation errors.


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2.  
  3. use strict;
  4. use warnings;
  5. use WWW::Telegram::BotAPI;
  6. use lib ".";
  7. use Auth qw( TOKEN );
  8.  
  9. # my $mitoken = TOKEN;
  10. my $api = WWW::Telegram::BotAPI->new(
  11.     token => TOKEN;
  12. );
  13. print $api->getMe->{result}{username};
  14.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
jon1337
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2020-01-05 06:20 @306

Re: Importar constante desde otro package

Notapor explorer » 2020-03-28 14:40 @653

El error está en el ';' dentro del new() (línea 11 del programa).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Importar constante desde otro package

Notapor jon1337 » 2020-03-28 16:01 @709

¡Muchísimas gracias! Tenía en la cabeza que sería por algo de la importación y se me escapó el punto y coma.
jon1337
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2020-01-05 06:20 @306


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado