Tại sao không có cảnh báo nào bị ném cho việc khai báo lại số $i
trong mã sau?Tại sao tôi không nhận được cảnh báo khi tôi redeclare biến kiểm soát Forl foreach?
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
for my $i (1..3) {
my $i = 'DUMMY';
print Dumper $i;
}
ví dụ thứ hai của bạn không phải là ở tất cả giống như là người đầu tiên, vì sự phạm vi khác nhau, cũng như vòng lặp lặp được đặt bí danh cho các phần tử mảng (có nghĩa là nếu bạn thay đổi $ i trong vòng lặp, bạn sẽ thay đổi mảng của mình hoặc tạo cảnh báo nếu các phần tử là hằng số). – Ether
chúng đều nằm trong cùng một phạm vi của khối, trong khi các ví dụ của bạn đều nằm trong các phạm vi khác nhau. –
Tính năng bí danh trong ví dụ thứ hai hoạt động như mong đợi, hãy thử làm theo cách riêng của mình: @a = (1 .. 3) của tôi; {my $ i; với $ i (1 .. 3) {$ i = 'x'; }} in "a: @a"; Đối với cùng phạm vi: như câu hỏi cho thấy, khai báo trong biểu thức rõ ràng không nằm trong phạm vi tương tự như khai báo trong khối bên trong. – willert