Tôi khá chắc chắn rằng tôi đã đọc một nơi nào đó mà có thể, nhưng có một vài gotchas mà bạn cần phải nhận thức được. Thật không may, tôi không thể tìm thấy hướng dẫn hoặc trang mô tả những gì bạn cần làm. Tôi nhìn qua Perl tutorials, và không tìm thấy cái mà tôi nhớ đọc. Ai đó có thể chỉ cho tôi một trang hoặc tài liệu mô tả cách đặt nhiều gói vào một tệp .pm duy nhất không?Trong Perl, làm cách nào để đặt nhiều gói trong một tệp .pm?
Trả lời
Bạn chỉ cần bắt đầu gói mới với một câu lệnh package:
package PackageOne;
# ...... code
package PackageTwo;
# .... more code
Làm thế nào để làm điều đó: chỉ cần ban hành nhiều package
hướng dẫn.
Gotchas Tôi có thể nghĩ: my
biến không phải là gói bản địa hóa, vì vậy chúng vẫn được chia sẻ. Trước khi bạn phát hành, bạn đang ở trong gói main
theo mặc định.
Đây là cách tôi thường làm điều đó:
use strict;
use warnings;
use 5.010;
{
package A;
sub new { my $class = shift; bless \$class => $class }
sub hello { say 'hello from A' }
}
{
package B;
use Data::Dumper;
sub new { my $class = shift; bless { @_ } => $class }
sub hello { say 'Hello from B + ' . shift->dump }
sub dump { Dumper $_[0] }
}
$_->hello for A->new, B->new(foo => 'bar');
Phạm vi khối tốt cho điều gì nếu gói định nghĩa phạm vi riêng của nó? – ceving
@ceving - Vì lý do tương tự mà 'gói' đã được thay đổi ở mức 5.14 perl bây giờ cho phép cú pháp sau:' package A {...} '. NB. Điều này giống như '{package A; ...} '). Điều này tránh * gotchas * bạn có thể nhận được với những thứ như 'my' &' our'. ref: http://perldoc.perl.org/5.14.0/functions/package.html – draegtun
Đây là những gì làm việc cho tôi:
#!/usr/bin/perl
use strict;
use warnings;
{
package A;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(a_sub);
our @EXPORT = qw(a_sub);
sub a_sub {
# your code ...
}
}
{
package B;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(b_sub);
our @EXPORT = qw(b_sub);
sub b_sub {
# your code ...
}
}
# Main code starts here ##############
use boolean;
use Data::Dumper;
import A qw(a_sub);
import B qw(b_sub);
a_sub();
b_sub();
Điểm quan trọng là thay vì sử dụng "sử dụng", bạn thay đổi nó cho " nhập khẩu "(theo cách đó nó sẽ không đi và cố gắng tìm tập tin).
Cách tiếp cận của tôi tương tự, tôi chỉ thay đổi '{package A; ...} 'đến' gói A {...} '. –
- 1. Làm cách nào để đặt AM/PM trong một TimePicker?
- 2. Làm cách nào để xóa một tệp trong Perl?
- 3. Đóng gói nhiều rpms trong một tệp
- 4. Nhiều tệp package.json trong một gói
- 5. Làm thế nào để bạn gọi một chương trình con từ một gói, được đặt tên gói trong Perl?
- 6. Làm cách nào để đặt nhiều kích thước tiện ích trong một gói ứng dụng?
- 7. Làm cách nào để phân biệt hai tệp trong Perl?
- 8. Tôi làm cách nào để có được số lượng trang trong một tệp PDF trong Perl?
- 9. Làm cách nào để sử dụng Tệp :: Tìm trong Perl?
- 10. Làm cách nào để chạy nhiều cài đặt Perl trên một máy?
- 11. Làm cách nào để mở một tệp Unicode bằng Perl?
- 12. Làm cách nào để chỉ định tiêu đề nhiều dòng trong gói Cài đặt iOS?
- 13. Làm cách nào để truy cập dữ liệu trong nhiều tệp CSV lớn một cách nhanh chóng từ Perl?
- 14. Làm cách nào để truy cập tệp trong gói OSGi?
- 15. Làm cách nào để gzip nén một chuỗi trong Perl
- 16. 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?
- 17. Trong Perl, cách tránh mở các tệp nhiều lần
- 18. Làm cách nào để chỉ ghi một số dòng nhất định của một tệp trong Perl?
- 19. Tôi làm cách nào để tìm ra tên tệp của gói Perl?
- 20. Làm thế nào để thay thế một chuỗi trong một tệp hiện có trong Perl?
- 21. Làm thế nào để bạn chỉ định một phiên bản gói trong Perl?
- 22. Làm cách nào để so sánh các giá trị được đóng gói trong Perl?
- 23. Làm cách nào để chuyển hướng đầu ra của hàm chết sang một tệp trong Perl?
- 24. Làm cách nào để chuyển hướng đầu ra tiêu chuẩn sang một tệp trong Perl?
- 25. Làm cách nào để tìm các ký tự ASCII mở rộng trong một tệp bằng Perl?
- 26. Làm cách nào để xóa cờ chỉ đọc khỏi một tệp trong Perl?
- 27. Trong Perl, có cách nào để buộc một stash?
- 28. Làm cách nào để xuất biểu tượng gói vào không gian tên trong Perl?
- 29. Làm cách nào để tìm tệp Perl nào được tải khi tôi sử dụng mô-đun?
- 30. Nơi đặt các tệp SQL trong một gói R?
Tôi khá chắc chắn trong bài viết mà tôi đã đọc, có một vài điều khác mà bạn phải làm hoặc các vấn đề có thể xuất hiện với phạm vi. –
tất nhiên sẽ có vấn đề phạm vi và đó là lý do tại sao nó không được khuyến khích, hãy xem liên kết tôi đã thêm vào. – ennuikiller
Bạn chỉ có thể 'sử dụng' một gói có tên tương ứng với tên tệp và bạn chỉ có thể (dễ dàng) 'sử dụng' một tệp chứa gói tương ứng với tên của nó. Khác hơn thế và thực tế là từ vựng tập tin phạm vi sẽ "rò rỉ" vào gói tiếp theo (tránh được bằng cách thêm niềng răng) không có nhiều điều cần biết. – hobbs