2010-06-22 43 views
16

Trong một SO answerdaxim trạng thái:"~~" có nghĩa là gì trong Perl?

@array ~~ $scalar is true when $scalar is in @array 

draegtun trả lời:

Từ 5.10.1+ thứ tự của ~~ là quan trọng. Vì vậy nó cần phải được $ vô hướng ~~ @array

Làm thế nào về một mồi nhỏ trên ~~ với liên kết (s) để nguồn (s) bao gồm các câu hỏi cụ thể như sau: ~~ là gì? ~~ được gọi là gì? Tại sao thứ tự quan trọng trong một phiên bản nhưng không phải trong một phiên bản trước?

Lưu ý rằng một bản tóm tắt tốt có thể không nhận được tất cả các chi tiết và có thể khó viết. Giới thiệu hoặc mồi sẽ rất hữu ích để tiết kiệm thời gian cho một người không quen thuộc với ~~ trong khi mở rộng sự tiếp xúc của chủ nghĩa Perlism này.

Search strings: non-word-tilde-tildenon-word-at-sign.

+2

Với những người đưa ra những câu trả lời cho hầu hết mọi câu trả lời ở đây, tôi rất sợ phải cân nhắc việc đăng bài! : P – Jeriko

+3

Nếu bạn có câu hỏi cụ thể để hỏi sau khi đọc tài liệu chính thức, hãy hỏi nó. – Ether

+0

'~~' là toán tử inchworm bí mật có thể được sử dụng để ép buộc ngữ cảnh vô hướng: '~~ localtime()' :-) –

Trả lời

23

Trả lời đặc biệt "tại sao vấn đề trật tự trong một phiên bản nhưng không phải trong một trước": các nhà điều hành trận đấu thông minh được thiết kế nặng nề trong 5.10.0 theo cách làm cho việc sử dụng khó sử dụng một cách đáng tin cậy và tạo ra/khi xây dựng ít hữu ích hơn có thể, vì vậy ngữ nghĩa đã được thay đổi với 5.10.1 và tất cả các phiên bản sau sẽ giả định rằng phiên bản 5.10.0 không bao giờ đã tồn tại.

Trong phiên bản 5.10.1+ của khớp thông minh, toán hạng bên trái và toán hạng bên phải đến ~~ luôn được xử lý rõ ràng. Cũng giống như toán tử đối sánh regex =~, bên trái là "chủ đề" của đối sánh và bên phải là "mẫu" để khớp - cho dù đó là một đồng bằng rộng, regex, mảng hoặc tham chiếu băm , một tham chiếu mã, hoặc bất cứ điều gì. Các chi tiết cụ thể được chi tiết khá tốt trong perlsyn.

Bạn không nên lo lắng về phiên bản 5.10.0, trừ khi bạn đã viết mã phụ thuộc vào 5.10.0 ngữ nghĩa (trong trường hợp này, bạn nên viết lại nó để yêu cầu 5.10.1, nếu không nó sẽ phá vỡ tất cả các phiên bản tương lai của perl).

+3

+1 để trả lời phần duy nhất của câu hỏi không được RTFM đề cập đến. –

+0

@Michael Carman: vì ~~ không hoạt động tốt trong tìm kiếm "Cái gì ~~ được gọi?" giải quyết cách tìm nó trong TFM. –

+2

@ C.W.Holeman II: Bạn có hỏi '= ~ 'là gì không? Làm thế nào về '&& '? Bạn có thể thực hiện cùng một yêu cầu "khó tìm kiếm" về những người đó. Trừ khi bạn hỏi về các toán tử giả như '=() =' hoặc obfuscations như '$ x -> 5' câu trả lời vẫn như cũ: xem perlop và perlsyn. –

18

thông minh trận đấu, xem perldoc perlsyn

mỗi một yêu cầu trong các bình luận, tôi sẽ cung cấp nhiều hơn một chút: thông minh trận đấu là một nhà điều hành với nhiều loại dữ liệu tùy ý mà cố gắng để làm cho ý nghĩa của một bài kiểm tra bình đẳng không biết gì hơn so với các loại đối số, nhiều thử nghiệm yêu cầu các hoạt động phức tạp như ứng dụng lặp lại và ứng dụng regex

+1

mà lần lượt là. ... gì? – OscarRyz

+5

Mà lần lượt là ... chi tiết kỹ lưỡng ngay sau liên kết đó. – hobbs

+2

Tôi đoán rất khó để giải thích bằng những từ đơn giản. : -/ – OscarRyz

5

(bị đánh cắp từ Tìm hiểu Perl): Nhị phân "~~" thực hiện một kết hợp thông minh giữa các đối số của nó.

http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail

Nó làm gì? "Nó phụ thuộc" chủ yếu vào loại đối số được cung cấp. Trang được liên kết ở trên có thông tin chi tiết về các biến thể là gì.

+0

Rõ ràng là trả lời "Cái gì ~~? Cái gì ~~ được gọi? Làm thế nào về một mồi nhỏ trên ~~ với (các) liên kết đến nguồn" xứng đáng là một downvote. Cấp, tôi đã không trả lời "Tại sao thứ tự quan trọng trong một phiên bản nhưng không phải trong một phiên bản trước đó" nhưng trang tôi liên kết đến, ngầm. – JasonTrue