41 votes

Comment utiliser les constantes d'un module Perl ?

Si je définis une constante dans un module Perl, comment puis-je utiliser cette constante dans mon programme principal ? (Ou comment appeler cette constante dans le programme principal).

48voto

friedo Points 36209

Les constantes peuvent être exportées tout comme les autres symboles du paquet. En utilisant la méthode standard Exportateur vous pouvez exporter les constantes d'un paquet comme ceci :

package Foo;
use strict;
use warnings;

use base 'Exporter';

use constant CONST => 42;

our @EXPORT_OK = ('CONST');

1;

Ensuite, dans un script client (ou autre module)

use Foo 'CONST';
print CONST;

Vous pouvez utiliser le %EXPORT_TAGS (voir la documentation de l'exportateur) pour définir des groupes de constantes qui peuvent être exportées avec un seul argument d'importation.

Mise à jour : voici un exemple d'utilisation de la fonction %EXPORT_TAGS si vous avez plusieurs constantes.

use constant LARRY => 42;
use constant CURLY => 43;
use constant MOE   => 44;

our @EXPORT_OK = ('LARRY', 'CURLY', 'MOE');
our %EXPORT_TAGS = ( stooges => [ 'LARRY', 'CURLY', 'MOE' ] );

Alors vous pouvez dire

use Foo ':stooges';
print "$_\n" for LARRY, CURLY, MOE;

25voto

moritz Points 6295

Les constantes sont simplement des sous-sous avec un prototype vide, elles peuvent donc être exportées comme n'importe quel autre sous-sous.

# file Foo.pm
package Foo;
use constant BAR => 123;
use Exporter qw(import);
our @EXPORT_OK = qw(BAR);

# file main.pl:
use Foo qw(BAR);
print BAR;

21voto

Tanktalus Points 7940

Pour développer les réponses précédentes, puisque les constantes ne sont en fait que des sous, vous pouvez également les appeler directement :

use Foo;
print Foo::BAR;

17voto

Berserk Points 297

Vous pouvez envisager d'utiliser En lecture seule au lieu de constante.

8voto

maletin Points 175
package Foo;
use Readonly;
Readonly my  $C1 => 'const1';
Readonly our $C2 => 'const2';
sub get_c1 { return $C1 }
1;

perl -MFoo -e 'print "$_\n" for Foo->get_c1, $Foo::C2'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X