Là một chút của một người mới perl, tôi chỉ chạy vào một lỗi nơi tôi vô tình đã làm một cái gì đó tương tự (ví dụ đơn giản):Tại sao perl không cảnh báo khi redeclaring một biến trong một phạm vi bên trong?
my $i=0;
for(my $i=0;$i<10; $i++)
{
print $i;
}
print $i; # $i is zero, my code expected 9
Từ Why don't I get a warning when I redeclare the Perl foreach control variable? Tôi hiểu rằng hành vi này được dự kiến; Tôi không nên nhận được cảnh báo trừ khi việc khai báo lại nằm trong cùng phạm vi.
Tuy nhiên, tôi không thể hiểu tại sao lại xảy ra trường hợp này. Tại sao perl không đưa ra cảnh báo ở đây? Dường như với tôi rằng đó có thể là nguyên nhân gây ra lỗi và thường không có ý định. Có một số trường hợp phổ biến mà đây là phong cách lập trình bình thường, để cảnh báo sẽ gây phiền nhiễu?
@Mat - nhiều khả năng không, mã như vậy là kết quả của lỗi trong quá trình tái cấu trúc thủ công thay vì theo thiết kế. Ví dụ. nhiều khả năng là một lỗi hơn điều mong đợi. – DVK
Duh. Và bởi vì đôi khi mọi người làm những thứ mà họ không có ý định làm, trình biên dịch có cảnh báo. – innaM
@Mat: 'my $ foo; my $ foo; 'cũng yêu cầu một biến rõ ràng với' my', nhưng Perl vẫn phát hành cảnh báo _ "my" variable $ foo mask khai báo trước đó trong cùng scope_. Nó không chỉ là vấn đề "bạn đang thực hiện một yêu cầu rõ ràng". –