Página 1 de 1

Importar constante desde otro package

NotaPublicado: 2020-03-28 06:31 @313
por jon1337
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.003 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.

Re: Importar constante desde otro package

NotaPublicado: 2020-03-28 10:35 @483
por explorer
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.

Re: Importar constante desde otro package

NotaPublicado: 2020-03-28 13:00 @583
por jon1337
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

Re: Importar constante desde otro package

NotaPublicado: 2020-03-28 14:40 @653
por explorer
El error está en el ';' dentro del new() (línea 11 del programa).

Re: Importar constante desde otro package

NotaPublicado: 2020-03-28 16:01 @709
por jon1337
¡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.