Đây bí mật cú pháp được gọi là dao hai lưỡi trang trí công phu , và thường được ký hiệu là:
<<m=~m>>
Comments here
m
;
Đây là một cuộc tấn công đối với các nhận xét nhiều dòng, sử dụng cú pháp heredoc và toán tử so khớp ( =~
) với >
làm dấu phân cách.
Lưu ý, vì dấu gạch chéo, /
không được sử dụng làm dấu phân cách để đối sánh, toán tử 'm' là bắt buộc. Ví dụ $my_var =~ /test/
tương đương với $my_var =~ m>test>
, ngược lại $my_var =~ >test>
sẽ không hợp lệ.
Hãy chú ý đến thực tế là m
ký tự đầu tiên trong đoạn mã của bạn được bao bằng dấu ngoặc kép, có nghĩa là các biến $a
và $b
sẽ không được nội suy. Nếu những dấu ngoặc kép này bị bỏ qua (theo ví dụ mã được cung cấp của tôi) thì perl sẽ tự động thêm dấu ngoặc kép vào điểm đánh dấu cuối và bất kỳ biến nào tiếp theo sẽ được nội suy. Điều này sẽ gây ra sự cố nếu $a
và $b
không còn được xác định và bạn đang sử dụng use warnings;
.
Để làm cho ví dụ về lưỡi kép được trang trí công phu ở trên dễ hiểu hơn (nhưng vẫn không được khuyến nghị), chúng tôi có thể viết:
<<"END" =~ //
Comments here
END
;
Lưu ý rằng điều =~ //
này là dư thừa, vì vậy điều này tương đương với:
<<"END";
Comments here
END
Đó chỉ là cú pháp heredoc chuẩn trong ngữ cảnh void.
Tôi không khuyên bạn nên sử dụng điều này trong mã sản xuất vì việc có một chuỗi trong ngữ cảnh void có thể gây ra sự cố. Thêm vào đó, mã này là một điều đáng kinh ngạc cho ngay cả những lập trình viên perl có kinh nghiệm nhất và rất khó đọc và bảo trì! Nếu bạn muốn tạo nhận xét nhiều dòng thích hợp thì tôi khuyên bạn nên gắn vào nhóm như được giải thích ở đây Làm cách nào để nhập nhận xét nhiều dòng trong Perl?
Hi vọng điều này sẽ làm sáng tỏ nó.