Đôi khi tôi cần một chức năng tiện ích hữu ích, như List::Util::max
ở giữa chương trình lớn thực hiện rất nhiều nội dung. Vì vậy, nếu tôi làmNhập khẩu một cách thủ công các chức năng hữu ích trong một tập lệnh lớn
use List::Util 'max';
Ở đầu chương trình, tôi bị mắc kẹt với biểu tượng đó, làm ô nhiễm toàn bộ không gian tên của tôi, mặc dù tôi chỉ cần nó trong một chương trình con.
Vì vậy, tôi đã nghĩ đến việc cố gắng một mô hình khác nhau, thay vì:
use List::Util();
# a whole bunch of stuff later...
sub blah {
List::Util->import('max');
$blah = max @foobar;
...
}
Có hai vấn đề với điều này, mặc dù. Đối với một, nó không tự động unimport ở cuối khối (drat.) Tôi sẽ phải hoàn tác mọi thứ với một unimport
.
Vấn đề khác là các nguyên mẫu rõ ràng không được áp dụng chính xác, vì vậy tôi phải nói max(@foobar)
thay vì phiên bản không có dấu ngoặc đơn đẹp hơn.
Có cách nào dễ dàng để nhập tạm thời các biểu tượng cho một khối, tự động khiến chúng biến mất ở cuối khối và cũng xử lý mẫu chính xác không?
Điều này sẽ giới thiệu các lỗi tinh tế nếu 'max' có một nguyên mẫu, vì hiệu ứng của nó được đốt cháy trong lúc biên dịch. Trong 'max2', nguyên mẫu từ' main :: max' được sử dụng, không phải là từ 'List :: Util :: max'. Một cách cẩn thận, bạn sẽ nhận được một cảnh báo về nguyên mẫu không phù hợp khi chuyển nhượng. –
@Eric Strom - Điểm tốt, điều đó sẽ hút. Sử dụng tên chương trình con 'cục bộ 'một cách thận trọng. – mob