Công cụ sửa đổi our
chỉ được sử dụng khi pragma nghiêm ngặt hoạt động để cho phép sử dụng biến toàn cục hoặc thậm chí nó được sử dụng cho một số tính năng bổ sung khác với biến toàn cầu bình thường khi tắt nghiêm ngặt?Có bất kỳ sự khác biệt nào giữa các biến được xác định của chúng tôi và các biến toàn cầu bình thường trong Perl không?
Trả lời
Có, our
tuyên bố có thể có các tính năng bổ sung khi so sánh với hình cầu chưa được khai báo. Nhưng đây là phần lớn không liên quan.
our
tạo bí danh từ vựng cho biến toàn cầu (có cùng tên). Tức là, trong các số package Foo
, our $bar
và $Foo::bar
, hãy tham khảo cùng một biến. Tuy nhiên, trước đây chỉ có sẵn trong một phạm vi từ vựng chặt chẽ.
Như our
có hiệu lực thi hành từ vựng, bí danh cũng có thể shadow biến từ vựng với my
:
our $foo = 42; # give some value
my $foo = -1; # same name, different value
say "my gives $foo";
our $foo; # reintroduce the alias; shadow lexical
say "our gives $foo";
Nếu bạn tách các our
tờ khai và chạy nó mà không chặt chẽ, điều này rõ ràng sẽ không cung cấp cho các đầu ra
my gives -1
our gives 42
Giống như my
, our
có thể mất thêm một cú pháp khai báo thêm, ví dụ:thuộc tính:
use threads::shared;
our $foo :shared;
Bạn cũng có thể chỉ định một loại để sử dụng với fields
pragma:
our Foo $foo;
này không thể được thực hiện cho các biến toàn cục mà không our
.
Như bạn có thể nhìn thấy từ perldocs, our
tạo một bí danh cho một biến gói với tên giống như our
ed biến trong gói hiện.
Nếu bạn đang viết mã có nhiều định nghĩa gói trong đó, bạn có thể sử dụng biến số our
ed để chuyển biến bí danh giữa các mô-đun.
package Foo:
our $bar = 42; # $bar is an alias for $Foo::bar
package Baz;
print $bar; # prints '42', since $bar is $Foo::bar
Do đó, việc sử dụng không liên quan gì đến các biến toàn cầu.
Tất cả các biến gói là biến toàn cầu. Những gì sử dụng này chứng minh là có một mục đích để 'our' ngoài việc đáp ứng' strict'. – darch
Theo câu hỏi sau (http://stackoverflow.com/questions/845060/what-is-the-difference-between-my-and-our-in-perl) các biến của chúng ta được cho là các biến gói và toàn cầu. Tôi không biết ai tin. – none
@ không có: Không có xung đột nào ở đây. 'our' khai báo (một bí danh cho) các biến gói (global). – Borodin
Toàn cầu, biến gói có thể truy cập ở mọi nơi, cho dù strict
có được đặt đúng hay không, nếu bạn chỉ định tên đủ điều kiện, tức là bạn đặt tiền tố cho tên gói. Vì vậy, tôi có thể truy cập $main::variable
ở mọi nơi bất cứ lúc nào.
Nếu không có strict
, nếu bạn truy cập $variable
mà bạn chưa khai báo với my
, Perl giả định đây là biến gói trong gói hiện tại. our
có thể được sử dụng để khai báo rõ ràng một biến gói, nhưng không có strict
nó không làm nhiều như bất cứ điều gì không khai báo cư xử theo cùng một cách.
Với strict
tại chỗ, các biến được khai báo với our
có thể truy cập được bằng tên địa phương cũng như tên đủ điều kiện của chúng, trong phạm vi từ vựng nơi khai báo xuất hiện. Điều đó có nghĩa là để truy cập vào một biến toàn cầu từ hai chương trình con, bạn phải khai báo nó trong cả hai chương trình con hoặc khai báo nó trước cả hai phần tử ở một phạm vi bên ngoài.
- 1. Sự khác biệt giữa "toàn cầu" và "nhập __main__"
- 2. PHP -Điều gì là sự khác biệt giữa các biến toàn cầu và hằng số
- 3. Bất kỳ sự khác biệt nào giữa DateTime.Parse và Convert.ToDateTime?
- 4. Xác định "biến toàn cầu" trong Django các mẫu
- 5. Chuỗi bất biến của Python và các lát của chúng
- 6. Bất kỳ sự khác biệt nào giữa malloc và Marshal.AllocHGlobal?
- 7. Sự khác biệt giữa quan sát lạnh trong RX và bình thường Có thể đếm được
- 8. Sự khác nhau giữa các biến liên kết và biến mà tôi nhập bằng && là gì?
- 9. Có bất kỳ sự khác biệt nào giữa var name = function() {} & function name() {} trong Javascript không?
- 10. Tôi có thể sử dụng __init__.py để xác định các biến toàn cầu không?
- 11. Có bất kỳ sự khác biệt nào giữa Java và Java của Oracle được sử dụng trong Android không?
- 12. Tại sao tập lệnh Perl của tôi không thể thấy các biến() mà tôi đã xác định trong tệp khác?
- 13. Sự khác biệt giữa danh sách và tuple (trừ bất biến) trong Python?
- 14. Sẽ có sự khác biệt về hiệu suất giữa các chức năng ẩn danh và các chức năng bình thường?
- 15. Sự khác biệt giữa các biến được ký và không ký là gì?
- 16. Sự khác biệt giữa các thuộc tính và các biến trong tệp tiêu đề iOS?
- 17. Ruby - Sự khác biệt giữa: biến và @variable
- 18. sự khác biệt giữa hai biến SYSTEMTIME
- 19. Sự khác biệt giữa $ @ và $! trong perl
- 20. Cách phân biệt giữa một biến không được khai báo và biến có thể được khai báo nhưng không được gán bất kỳ giá trị nào?
- 21. Bất kỳ sự khác biệt nào giữa Chrome trên Mac và Chrome trên Windows?
- 22. Sự khác biệt giữa các định dạng "mở" này
- 23. Bất kỳ sự khác biệt cơ bản nào giữa tệp nguồn và tiêu đề trong C?
- 24. Làm thế nào tôi có thể chia sẻ giá trị toàn cầu giữa các gói khác nhau trong Perl?
- 25. sự khác biệt giữa "void 0" và "không xác định"
- 26. Bất kỳ sự khác biệt nào giữa f (const string &) và f (const string)?
- 27. biến toàn cầu không có phạm vi toàn cầu
- 28. Có thể có bất kỳ sự khác biệt nào giữa Clean + Rebuild và Clean + Build
- 29. Xác định các biến toàn cục trong mpi
- 30. Bất kỳ sự khác biệt nào giữa dir() và locals() bằng Python?
Thực sự là một câu trả lời hay! – none