Nếu tôi xác định một hằng số trong một mô-đun Perl, làm cách nào để sử dụng hằng số đó trong chương trình chính của tôi? (Hoặc làm cách nào để gọi hằng số đó trong chương trình chính?)Làm cách nào để sử dụng các hằng số từ mô-đun Perl?
Trả lời
Có thể xuất các hằng số giống như các biểu tượng gói khác. Sử dụng Exporter mô-đun tiêu chuẩn, bạn có thể xuất hằng từ một gói phần mềm như thế này:
package Foo;
use strict;
use warnings;
use base 'Exporter';
use constant CONST => 42;
our @EXPORT_OK = ('CONST');
1;
Sau đó, trong một kịch bản khách hàng (hoặc mô-đun khác)
use Foo 'CONST';
print CONST;
Bạn có thể sử dụng %EXPORT_TAGS
băm (xem Tài liệu của nhà xuất khẩu) để xác định các nhóm hằng số có thể được xuất với một đối số nhập duy nhất.
Cập nhật: Dưới đây là ví dụ về cách sử dụng tính năng %EXPORT_TAGS
nếu bạn có nhiều hằng số.
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' ]);
Sau đó, bạn có thể nói
use Foo ':stooges';
print "$_\n" for LARRY, CURLY, MOE;
sử dụng Xuất khẩu 'nhập khẩu'; là tốt hơn, nhưng sẽ yêu cầu nâng cấp Trình xuất trên perl sớm hơn 5.8.3. –
hãy giải thích lý do tại sao sử dụng 'nhập' tốt hơn? –
Cách tốt nhất để tránh gói "không đổi". http://earino.wordpress.com/2013/02/27/use-constant-will-surprise-you-with-its-evil/ Các giải pháp thay thế tại đây: http://neilb.org/reviews/constants.html – nslntmnx
Constants chỉ là tàu ngầm với nguyên mẫu trống, vì vậy họ có thể được xuất khẩu giống như bất kỳ phụ khác.
# 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;
Để mở rộng trên các câu trả lời trước đó, vì hằng số thực sự chỉ là tàu ngầm, bạn có thể cũng gọi cho họ trực tiếp:
use Foo;
print Foo::BAR;
Không tham khảo câu trả lời như ở trên, bởi vì nếu câu trả lời của bạn được bỏ phiếu đủ, nó có thể kết thúc ở trên chúng. –
Bạn có thể muốn xem xét sử dụng Readonly thay vì liên tục.
Tại sao? Có gì sai với hằng số? – moritz
Bạn không thể làm điều này với nó: in "hằng số là $ hằng số"; hoặc điều này: in $ hash {constant}; –
Vì 'hằng số sử dụng' tạo ra một chương trình con, có những vấn đề không mong muốn => không có nội suy chuỗi, khó sử dụng như một khóa băm. Xem tài liệu cho chỉ đọc [https://metacpan.org/module/Readonly#COMPARISON-WITH-use-constant]. Chỉ đọc sử dụng nội bộ perl để đánh dấu trực tiếp một biến là chỉ đọc. Chỉ đọc chậm (trừ khi sử dụng Readonly :: XS) và không được duy trì.Xem thêm Dữ liệu :: Khóa và Const :: Nhanh để triển khai khác nhau. – 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'
Để thêm vào túi thủ thuật, vì hằng số chỉ là một chương trình con, bạn thậm chí có thể gọi nó là phương thức lớp.
package Foo;
use constant PI => 3.14;
print Foo->PI;
Nếu bạn có nhiều hằng số, đây là cách tốt nhất để truy cập thường xuyên mà không phải xuất tất cả. Tuy nhiên, không giống như Foo::PI
hoặc xuất PI
, Perl sẽ không biên dịch Foo->PI
do đó bạn phải chịu chi phí của một cuộc gọi phương thức (có thể không quan trọng).
- 1. Làm cách nào để nhập các hằng số vào nhiều mô-đun trong Perl?
- 2. Làm cách nào để xác định các hằng số trong một tệp riêng biệt trong Perl?
- 3. Làm cách nào để sử dụng các hằng số trong haskell, để tránh các số ma thuật?
- 4. Làm cách nào để tạo một băm lồng nhau dưới dạng hằng số trong Perl?
- 5. Khi nào và cách sử dụng hằng số trong PHP?
- 6. Làm thế nào để bạn sử dụng sed từ Perl?
- 7. Làm cách nào để sử dụng Tệp :: Tìm trong Perl?
- 8. Làm thế nào để dự đoán thủy triều bằng cách sử dụng hằng số hài hòa
- 9. Sử dụng biến lớp làm hằng số trong Scala
- 10. Sử dụng enum làm hằng số nguyên trong C#
- 11. Làm cách nào để lấy tên của hằng số?
- 12. Sử dụng hằng số với CUDA
- 13. Làm cách nào để khai báo hằng số Int64?
- 14. Làm thế nào để môđun hóa ứng dụng JSF/Facelets/Spring bằng OSGi?
- 15. Làm cách nào để sử dụng GTK3 với perl?
- 16. cách sử dụng hằng số từ lớp như một định nghĩa đối số trong hàm php?
- 17. Làm thế nào để quản lý các hằng số dự án trong một dự án bằng cách sử dụng C#?
- 18. Sử dụng hằng số Scala trong Java
- 19. Tạo danh sách hằng số biến từ các hằng số khác
- 20. Tại sao Phobos sử dụng enum cho các hằng số?
- 21. Khi nào sử dụng #define hoặc hằng số char/int?
- 22. Sử dụng các hằng số làm chỉ mục cho các mảng kết hợp Javascript
- 23. Làm cách nào để sử dụng các giao dịch với Stomp và ActiveMQ (và Perl)?
- 24. Làm thế nào để xác định một hằng số bằng cách sử dụng một số khác trong một lớp Matlab
- 25. Làm cách nào để lên lịch các tác vụ một lần từ ứng dụng Perl CGI?
- 26. Làm cách nào để sử dụng mô-đun Perl từ một vị trí tương đối?
- 27. Làm cách nào để thu thập dữ liệu từ trang web sử dụng AJAX, với Perl?
- 28. Làm thế nào để sắp xếp các số trong Perl?
- 29. Làm thế nào để thay đổi hằng số PHP?
- 30. Làm thế nào để sử dụng một hằng số ghi đè trong một lớp inheritanced
Cách tốt nhất để tránh gói "không đổi". http://earino.wordpress.com/2013/02/27/use-constant-will-surprise-you-with-its-evil/ Các giải pháp thay thế tại đây: http://neilb.org/reviews/constants.html – nslntmnx