So sánh sử dụng perl -w -Mstrict
:Điều gì đang xảy ra khi() của tôi là có điều kiện?
# case Alpha
print $c;
...
# case Bravo
if (0) {
my $c = 1;
}
print $c;
...
# case Charlie
my $c = 1 if 0;
print $c;
Alpha
và Bravo
cả phàn nàn về biểu tượng toàn cầu không có một tên gói rõ ràng, mà được mong đợi. Nhưng Charlie
không đưa ra cảnh báo tương tự, duy nhất mà giá trị chưa được định hình, trong đó có mùi rất giống:
# case Delta
my $c;
print $c;
Chính xác những gì đang xảy ra dưới mui xe? (Mặc dù một cái gì đó như thế này không bao giờ được viết cho mã sản xuất)
Trong trường hợp Bravo, '$ c' được lexically scoped đến' nếu (0) ... 'khối, và nó là một lỗi (dưới 'sử dụng nghiêm ngặt') để tham chiếu đến nó bên ngoài khối đó. – mob
Nhân tiện, hành vi của 'my $ c = 1 nếu 0; ... $ c ... 'là chính thức không xác định (và được ghi lại như vậy), có nghĩa là không được phép và có thể dẫn đến hành vi không mong muốn (ví dụ: bị lỗi). Vâng, nó sẽ không sụp đổ, nhưng nó có thể :) – ikegami
@ikegami hmm bạn hoàn toàn đúng nó được liệt kê dưới phần "điều chỉnh tuyên bố" của perlsyn. lời nhắc nhở tốt! –