Bạn đã có câu trả lời hay, nhưng có lẽ điều này cũng sẽ hữu ích.
Tuyên bố our
kết hợp các khía cạnh của my
và use vars
. Nó hoạt động tương tự như use vars
ở chỗ nó khai báo các biến gói; tuy nhiên, các biến được khai báo theo cách này bị lexically scoped và không thể được truy cập bên ngoài phạm vi mà chúng đã được khai báo (trừ khi bạn sử dụng tên đầy đủ của biến). Ngoài ra, biến được khai báo với our
hiển thị trên toàn bộ phạm vi từ vựng của nó, ngay cả trên các ranh giới gói.
Đây là bảng tôi đã thêm vào ghi chú Perl của mình trong khi quay lại. Ví dụ, xem this SO answer.
Scope/ Package
Namespace Variable Private New
---------------------------------------------------
my Lexical No Yes Yes
our Lexical Yes No No
use vars Package Yes No No
Cảm ơn, tôi hiểu ngay bây giờ. –
Nó thực sự là một bí danh, nếu nó chỉ là một sự miễn trừ cho 'strict' thì 'perl -le' của chúng ta $ foo = 42; gói A; in "$ foo $ main :: foo" ' 42 42' sẽ in cùng một thứ với 'perl -le' sử dụng vars qw/$ foo /; $ foo = 42; gói A; in "$ foo $ main :: foo" '', đó là một sự miễn trừ, và chúng ta sẽ không cần' our'. –
@Điểm tốt. – hobbs