Tài liệu có vẻ thưa thớt về các tuyên bố when
bên ngoài các khối given
. Người ta nói rằng when
có thể được sử dụng khi một 'chủ đề' đã được thiết lập, nhưng khi chính xác là một chủ đề được coi là thiết lập? Hãy xem xét những trường hợp này:Các điều kiện mà theo đó ai có thể sử dụng câu lệnh 'when' trong Perl 5?
for (@arr) {
when { }
}
Có vẻ đây là mặc định, trường hợp cơ bản, nhưng tôi không thể nhận được thậm chí làm việc này trên perl tôi 5.14.2 - Hóa ra đây chỉ là một vấn đề trích dẫn khác.$ perl -Mfeature=switch -e 'foreach (qw(a b c)) { when (/a/) {print 'boom'} }'
in gì cả. Tôi đang làm gì sai?
for my $elem (@arr) {
when { }
}
Điều này có hiệu quả không? Sẽ $ elem tự động trở thành chủ đề cho when
để sử dụng?
for (@arr) {
$_ = some_expression($_);
when { }
}
Điều này có hiệu quả không? Chủ đề có thể được đặt trong vòng lặp không?
Ngoài ra, có sự khác biệt nào khi mỗi phân đoạn mã trên sử dụng foreach
thay vì for
?
Về cơ bản, tôi không rõ ràng về chủ đề của chủ đề, vì vậy hãy khai sáng cho tôi.
Tôi luôn đi sai với dấu ngoặc kép, cảm ơn. Cảm ơn bạn đã liên kết đến câu trả lời khác của bạn, điều đó và các liên kết từ đó đã giúp hiểu trạng thái tốt hơn. Tôi có một trường hợp lạ với cái này: 'perl -E '@arr = qw (a b c); foreach $ x (@arr) {$ _ = $ x; $ _ ++; khi (/ b /) {print $ x}} '' Nó in như mong đợi, nhưng sau đó dường như chết với lỗi" Không thể sử dụng khi() bên ngoài một topicalizer tại -e dòng 1. ". Cùng một mã chạy mà không có lỗi (nhưng in không có gì) nếu tôi loại bỏ hai dòng với $ _. Bạn có thể giải thích những gì đang xảy ra ở đây? – sundar
@ sundar, Vấn đề không phải là sự lựa chọn của dấu ngoặc kép. Vấn đề là bạn đã không trốn thoát chúng đúng cách. Xem cập nhật. – ikegami
cú pháp này để thoát 'là mới và hữu ích cho tôi, cảm ơn. liên quan đến việc chủ đề hóa, đó là lý do tại sao tôi đã đề cập rằng "cùng một mã chạy mà không có lỗi nếu tôi xóa hai dòng với $ _". Dường như bất kỳ vòng lặp foreach foreach nào cũng được coi là một bộ chỉnh sửa, ngay cả đối với các SOMETHING (...), nhưng gán cho $ _ bên trong vòng lặp messes lên bằng cách nào đó. – sundar