Bài đăng bạn đã liên kết là gây hiểu lầm hoặc ít nhất là không đầy đủ. Đúng là bạn không bao giờ nên sử dụng local
để tạo một biến từ vựng. Nó không làm như vậy, và đó là những gì my
là dành cho.
Tuy nhiên, bạn nên sử dụng local
khi bạn cần chức năng thực tế của nó: đưa ra giá trị tạm thời cho biến toàn cầu. Điều này thường được sử dụng để tạm thời thiết lập các biến đặc biệt của Perl. Trường hợp cổ điển giống như sau:
{
local $/;
$entire_file = <$filehandle>;
}
Để đọc toàn bộ tệp cùng lúc, bạn cần đặt dấu phân cách bản ghi thành không xác định. Nhưng bạn chỉ muốn tạm thời làm điều đó; do đó local
nên được sử dụng.
Điều này hoàn toàn không được khuyến khích. Nó được coi là mã Perl tốt.
Cập nhật: Tôi thấy rằng bài viết thực sự có ghi chú đủ điều kiện tuyên bố "không bao giờ sử dụng cục bộ" của nó. Tuy nhiên, tôi nghĩ rằng nó là sai lầm để làm cho một tuyên bố chăn. Tôi đồng ý với các nhà phê bình mà ghi chú đang phản hồi. Ví dụ trên là trường hợp cơ bản, phổ biến và có một số cách sử dụng phổ biến khác của local
trong tĩnh mạch đó.
Tôi hiểu rằng hướng dẫn của người mới bắt đầu cần phải giữ mọi thứ đơn giản, nhưng đơn giản không có nghĩa là không chính xác. "Hiện tại, đừng lo lắng về local
; chỉ cần sử dụng my
" sẽ rõ ràng và đơn giản, nhưng sẽ không đánh lừa ai đó nghĩ rằng địa phương nên không bao giờ sử dụng.
Nguồn
2013-01-22 12:00:16
Bài đăng bạn đã liên kết không sai về. Nhưng câu lệnh ** ... không bao giờ sử dụng ** địa phương. Giữ lại giá trị giữa các cuộc gọi hàm là một trong những lợi thế của 'local'. Khi bạn sử dụng 'my', bạn thực hiện phạm vi từ vựng, có nghĩa là nó chỉ hợp lệ giữa các dấu ngoặc nhọn của khối đó chứ không phải giữa các cuộc gọi hàm. Sử dụng của tôi khi bạn muốn các giá trị riêng biệt với mọi cuộc gọi. 'local' chỉ sử dụng lại các biến toàn cầu làm biến mới cho khối đó. –
@Drt: 'biến' cục bộ * không * giữ lại giá trị của chúng trong các cuộc gọi hàm. – Borodin
@borodin: từ [perldoc] (http://perldoc.perl.org/perlsub.html#Temporary-Values-via-local%28%29): 'địa phương chủ yếu được sử dụng khi giá trị hiện tại của biến phải là hiển thị để gọi các chương trình con.' –