Si defino una constante en un módulo Perl, ¿cómo uso esa constante en mi programa principal? (¿O cómo puedo llamar a esa constante en el programa principal?)¿Cómo uso las constantes de un módulo Perl?
Respuesta
Las constantes se pueden exportar al igual que otros símbolos del paquete. Utilizando el módulo estándar Exporter, puede exportar las constantes de un paquete como este:
package Foo;
use strict;
use warnings;
use base 'Exporter';
use constant CONST => 42;
our @EXPORT_OK = ('CONST');
1;
Luego, en un script de cliente (u otro módulo)
use Foo 'CONST';
print CONST;
Puede usar el hash %EXPORT_TAGS
(ver el Documentación del exportador) para definir grupos de constantes que se pueden exportar con un solo argumento de importación.
Actualización: Aquí hay un ejemplo de cómo usar la característica %EXPORT_TAGS
si tiene múltiples 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' ]);
entonces se puede decir
use Foo ':stooges';
print "$_\n" for LARRY, CURLY, MOE;
use Exportador 'importación'; es mejor, pero requerirá actualizar Exporter en perl's anterior a 5.8.3. –
por favor explique por qué está usando 'importar' mejor? –
Lo mejor es evitar el paquete "constante". http://earino.wordpress.com/2013/02/27/use-constant-will-surprise-you-with-its-evil/ Alternativas aquí: http://neilb.org/reviews/constants.html – nslntmnx
Las constantes son sólo los submarinos con prototipo de vacío, por lo que se pueden exportar como cualquier otro sub.
# 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;
Para ampliar las respuestas anteriores, dado que las constantes son en realidad submarinos, puede también llamar directamente:
use Foo;
print Foo::BAR;
No se refiera a las respuestas como arriba, porque si su respuesta se vota lo suficiente, puede terminar por encima de ellas. –
Es posible que desee considerar el uso de Readonly en lugar de constante.
¿Por qué? ¿Qué pasa con la constante? – moritz
No puede hacer esto con él: imprimir "constante es $ constante"; o esto: print $ hash {constant}; –
Dado que 'use constant' crea una subrutina, hay problemas inesperados => sin interpolación de cadenas, dificultad para usar como una clave hash. Consulte los documentos para Readonly [https://metacpan.org/module/Readonly#COMPARISON-WITH-use-constant]. Solo use las partes internas de perl para marcar directamente una variable como de solo lectura. Readonly es lento (a menos que se use Readonly :: XS) y no se ha mantenido.Ver también Data :: Lock y Const :: Fast para diferentes implementaciones. – spazm
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'
a añadir a la bolsa de trucos, ya que una constante es simplemente una subrutina incluso se puede llamar como un método de clase.
package Foo;
use constant PI => 3.14;
print Foo->PI;
Si usted tiene un montón de constantes es una buena manera de conseguir en el que de vez en cuando sin tener que exportar a todos. Sin embargo, a diferencia de Foo::PI
o exportando PI
, Perl no compilará Foo->PI
por lo que incurrirá en el costo de una llamada a método (que probablemente no importe).
- 1. Módulo Perl uso
- 2. ¿Cómo incluir las constantes y variables de un Módulo?
- 3. ¿Cómo uso un módulo Perl desde una ubicación relativa?
- 4. Constantes hash en Perl
- 5. ¿Cómo uso una determinada versión (o superior) de un módulo perl en mi script perl?
- 6. Descarga de todas las dependencias para un módulo de Perl
- 7. ¿Cómo instalo un módulo? Strawberry Perl emite
- 8. ¿Cómo se crea un módulo Perl?
- 9. Perl - Paquete Temas/Módulo
- 10. ¿Cómo puedo gestionar las dependencias del módulo Perl?
- 11. ¿Cómo heredo las subrutinas en Perl con 'base de uso'?
- 12. Cómo definir adecuadamente las constantes
- 13. ¿Cómo puedo definir constantes en un archivo separado en Perl?
- 14. ¿Cómo puedo importar constantes en múltiples módulos en Perl?
- 15. ¿Cómo 'uso' un módulo Perl en un directorio que no está en @INC?
- 16. Cómo construir un archivo de manifiesto para un módulo Perl
- 17. ¿Cómo uso condicionalmente un módulo Perl solo si estoy en Windows?
- 18. ¿Cómo puedo forzar la descarga de un módulo Perl?
- 19. Uso de las constantes de cadena en la conversión implícita
- 20. Heredando constantes dentro de un módulo de Ruby
- 21. ¿Cómo escribir una referencia de función en un módulo Perl?
- 22. Convenciones, estilo y uso de las constantes de Clojure?
- 23. ¿Hay un módulo Equivlant Perl para el módulo pydbg?
- 24. El uso de constantes PHP DOP en las llamadas
- 25. Las ventajas de las constantes
- 26. ¿Cómo puedo cargar un módulo Perl en tiempo de ejecución?
- 27. ¿Cómo cargo un módulo en tiempo de ejecución en Perl?
- 28. ¿Cómo puedo encontrar la versión de un módulo Perl instalado?
- 29. Operador de módulo Perl pregunta
- 30. ¿Cómo incluir el registro en un módulo Perl?
Es mejor evitar el paquete "constante". http://earino.wordpress.com/2013/02/27/use-constant-will-surprise-you-with-its-evil/ Alternativas aquí: http://neilb.org/reviews/constants.html – nslntmnx