Jeśli zdefiniuję stałą w module Perla, w jaki sposób mogę użyć tej stałej w moim głównym programie? (Lub jak mogę wywołać tę stałą w programie głównym?)Jak używać stałych z modułu Perla?
Odpowiedz
Stałe można eksportować tak jak inne symbole paczek. Przy użyciu standardowego modułu Exporter można wyeksportować stałych z pakietu tak:
package Foo;
use strict;
use warnings;
use base 'Exporter';
use constant CONST => 42;
our @EXPORT_OK = ('CONST');
1;
Następnie w skrypcie klienckim (lub innego modułu)
use Foo 'CONST';
print CONST;
można użyć %EXPORT_TAGS
hash (patrz Dokumentacja eksportera), aby zdefiniować grupy stałych, które można wyeksportować za pomocą pojedynczego argumentu importu.
Aktualizacja: Oto przykład użycia funkcji %EXPORT_TAGS
, jeśli masz wiele stałych.
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' ]);
Wtedy można powiedzieć
use Foo ':stooges';
print "$_\n" for LARRY, CURLY, MOE;
wykorzystanie Eksporter "import"; jest lepszy, ale będzie wymagał uaktualnienia Eksportera na perlu wcześniejszym niż 5.8.3. –
proszę wyjaśnić, dlaczego lepiej używasz "importu"? –
Najlepiej unikać pakietu "stałego". http://earino.wordpress.com/2013/02/27/use-constant-will-surprise-you-with-its-evil/ Alternatywy tutaj: http://neilb.org/reviews/constants.html – nslntmnx
Stałe są tylko kanapki z pustym prototyp, więc mogą być eksportowane jak każdy inny 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;
Aby rozwinąć na wcześniejszych odpowiedzi, ponieważ stałe są naprawdę tylko kanapki, można również nazywają je wprost:
use Foo;
print Foo::BAR;
Nie odwołuj się do odpowiedzi jako powyżej, ponieważ jeśli twoja odpowiedź zostanie odpowiednio przegłosowana, może skończyć się powyżej. –
Można rozważyć użycie Readonly zamiast stała.
Dlaczego? Co jest nie tak ze stałą? – moritz
Nie można tego zrobić za pomocą: print "constant is $ constant"; lub to: print $ hash {constant}; –
Ponieważ "stała użycia" tworzy podprogram, występują nieoczekiwane problemy => brak interpolacji ciągów, trudności w użyciu jako klucz skrótu. Zobacz dokumenty dla Readonly [https://metacpan.org/module/Readonly#COMPARISON-WITH-use-constant]. Readonly użyj elementów wewnętrznych perla, aby bezpośrednio oznaczyć zmienną jako tylko do odczytu. Readonly jest powolny (chyba że używa się Readonly :: XS) i nie jest utrzymywany.Zobacz także Data :: Lock i Const :: Fast dla różnych implementacji. – 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'
Aby dodać do sztuczek, ponieważ stała jest tylko podprogram można nawet nazwać jako metoda klasy.
package Foo;
use constant PI => 3.14;
print Foo->PI;
Jeśli masz dużo stałych, to jest to dobry sposób na od czasu do czasu, bez konieczności eksportowania wszystkich. Jednak w przeciwieństwie do Foo::PI
lub eksportu PI
, Perl nie skompiluje się Foo->PI
, więc poniesiesz koszt wywołania metody (co prawdopodobnie nie ma znaczenia).
- 1. Wywołanie modułu Perla z Python
- 2. Brak modułu o nazwie stałych
- 3. Jaki jest najskuteczniejszy sposób eksportowania wszystkich stałych (zmienne tylko do odczytu) z modułu Perla
- 4. jak poprawnie używać referencji Perla
- 5. Jak mogę zarządzać zależnościami modułu Perla?
- 6. Jak dynamicznie zmieniać ścieżkę modułu Perla?
- 7. Błąd instalacji modułu Perla CPAN
- 8. Haskell wzorzec dopasowania - jak używać stałych zmiennych
- 9. Jak ukryć ostrzeżenia Perla emitowane z kodu załadowanego modułu?
- 10. Jak warunkowo używać modułu Perla tylko wtedy, gdy jestem w systemie Windows?
- 11. Zbuduj listę zmiennych stałych z innych stałych
- 12. Czy mogę używać stałych w funkcjach PHP?
- 13. Najlepszy sposób na przesłonięcie wartości/stałych modułu w kątowym JS
- 14. Czy jest możliwe przekazanie parametrów do ładowania modułu Perla?
- 15. Jak używać zmiennych globalnych lub stałych w Ruby?
- 16. Jak można używać modułu rejestrowania w pythonie z modułem unittest?
- 17. Czy istnieje rdzeń modułu Perla dla obsługi SSL/TLS?
- 18. Wywołanie modułu Pythona z Perl
- 19. Co zyskuję filtrując adresy URL za pomocą modułu URI Perla?
- 20. Jak znaleźć, który plik został załadowany do Perla, gdy korzystam z modułu?
- 21. Jak połączyć się z bazą danych MSSQL przy użyciu modułu DBI Perla w systemie Windows?
- 22. Dziedziczenie stałych z pakietami wbudowanymi
- 23. Java - czy należy używać stałych w komunikatach do dziennika?
- 24. Jak mogę korzystać z bibliotek Perla z PHP?
- 25. Zalety stałych
- 26. CakePHP Definiowanie stałych
- 27. Ciąg stałych publicznych?
- 28. Uruchom screen z Perla
- 29. Jak zastąpić klasy pochodne stałych?
- 30. Jak mogę używać modułu PowerShell w skrypcie bez opuszczania modułu załadowanego do sesji użytkownika?
Najlepiej unikać pakietu "stałego". http://earino.wordpress.com/2013/02/27/use-constant-will-surprise-you-with-its-evil/ Alternatywy tutaj: http://neilb.org/reviews/constants.html – nslntmnx