Nó không ngoại trừ điều kiện của tuyên bố while
.
$ perl -MO=Deparse -e 'while(<>) { print }'
while (defined($_ = <ARGV>)) {
print $_;
}
-e syntax OK
$ perl -MO=Deparse -e '<>; print'
<ARGV>;
print $_;
-e syntax OK
perlop
tài liệu mà tự động gán cho $_
chỉ xảy ra trong bối cảnh này:
Thông thường bạn phải gán giá trị trả về một biến, nhưng có là một tình huống mà một bài tập tự động xảy ra . Nếu và chỉ khi biểu tượng đầu vào là điều duy nhất bên trong điều kiện của câu lệnh "while" (ngay cả khi được cải trang thành vòng lặp "cho (;;)"), giá trị là được gán tự động cho biến toàn cầu $ _ , phá hủy bất cứ điều gì đã có trước đó. (Điều này có vẻ giống như một điều kỳ lạ đối với bạn, nhưng bạn sẽ sử dụng cấu trúc trong hầu hết mọi kịch bản Perl bạn viết.) Biến số $ _ không được bản địa hóa hoàn toàn. Bạn sẽ phải đặt một "địa phương $ _;" trước vòng lặp nếu bạn muốn điều đó xảy ra.
Thứ nhất là ngữ cảnh vô hướng, phải không? –
@PaulTomblin: Vậy sao? –
'$ a = <>; in $ a; 'in dòng đầu tiên. Vì vậy, tôi đoán '<>;' không cập nhật $ _. –