2012-05-01 45 views
8

thể trùng lặp:
What does =~ do in Perl?không = ~ có ý nghĩa gì trong Perl

Trong một chương trình Perl tôi suy xét (namly plutil.pl), tôi thấy rất nhiều =~ trên phân tích cú pháp XML phần. Ví dụ, đây là chức năng UnfixXMLString (đường 159-167 trên 1,7 ($VERSION sai khai báo là "1.5"))

sub UnfixXMLString { 
    my ($s) = @_; 

    $s =~ s/&lt;/</g; 
    $s =~ s/&gt;/>/g; 
    $s =~ s/&amp;/&/g; 

    return $s; 
} 

Từ những gì tôi có thể nói, nguyên mẫu C của nó sẽ là (C-like) string UnfixXMLString(string s) và nó sử dụng toán tử =~ trên tham số (s) và sau đó trả về chuỗi đã sửa đổi, nhưng nó đang làm gì?

Trả lời

17

=~ là Perl binding operator. Nó thường được sử dụng để áp dụng một biểu thức chính quy cho một chuỗi; Ví dụ, để kiểm tra xem một chuỗi khớp với mẫu:

if ($string =~ m/pattern/) { 

Hoặc để trích xuất các thành phần từ một chuỗi:

my ($first, $rest) = $string =~ m{^(\w+):(.*)$}; 

Hoặc để áp dụng quyền thay người:

$string =~ s/foo/bar/; 
+4

Cụ thể hơn, nó được sử dụng để liên kết toán tử 'm //', 's ///' hoặc 'y ///' ('tr ///') với vô hướng. Regexes không liên quan đến cái cuối cùng. Nó cũng có thể được sử dụng như '$ var = ~ $ re', nó khá giống với' $ var = ~/$ re/'. – tchrist

3

= ~ Is toán tử liên kết Perl và có thể được sử dụng để xác định xem một biểu thức chính quy có khớp hay không (đúng hoặc sai)

$sentence="The river flows slowly."; 
if($sentence =~ /river/) 
{ 
    print "Matched river.\n"; 
} 
else 
{ 
    print"Did not match river.\n"; 
} 
Các vấn đề liên quan