2013-02-05 27 views
5

Tôi tương đối mới đối với perl và có đoạn mã mẫu trong check_ilo2_health.pl trong đó có một cú pháp mà tôi không hiểu cách thức hoặc lý do hoạt động. Đoạn mã phân tích dữ liệu khách hàng SSL, trong trường hợp này là XML, từng dòng một.Perl, Gán cho biến từ đối sánh regex

if ($line =~ m/MESSAGE='/) { 
    my ($msg) = ($line =~ m/MESSAGE='(.*)'/); #<---- HERE 

    if ($msg !~ m/No error/) { 
     if ($msg =~ m/Syntax error/) { #...etc 

Một ví dụ về XML trong câu hỏi:

<RESPONSE 
    STATUS="0x0000" 
    MESSAGE='No error' 
/> 

Vì vậy, trong trường hợp này nếu tuyên bố mất ĐIỆP dòng của mẫu XML. Tôi hiểu rằng ($ msg) của tôi coi biến đó là một loại danh sách và tôi hiểu cách các cụm từ thông dụng phù hợp; tuy nhiên, những gì tôi không hiểu là cú pháp sao cho $ msgđược gán đến Không có lỗi. Perl dường như được chơi xung quanh với cú pháp ngoặc đơn và như vậy cho điều này để làm việc. Trong khi nó hoạt động tôi muốn biết làm thế nào nó hoạt động. Bất kỳ trợ giúp sẽ được đánh giá cao.

+0

Nếu bạn đang tham chiếu đến '= ~' hoặc '! ~', Đó là [toán tử liên kết] (http://perldoc.perl.org/perlop.html#Binding-Operators). –

Trả lời

10

Xem Perlretut, Extracting-matches:

... trong bối cảnh vô hướng, $time =~ /(\d\d):(\d\d):(\d\d)/ trả về giá trị true hoặc false. Trong danh sách bối cảnh, tuy nhiên, nó sẽ trả về danh sách các giá trị phù hợp ($1,$2,$3)

Vì vậy, trong

($msg) = ($line =~ m/MESSAGE='(.*)'/); 

($line =~ m/MESSAGE='(.*)'/) trả về một danh sách các trận đấu của các nhóm chụp. Bạn có một nhóm chụp, vì vậy nội dung của nó được lưu trữ trong ($ msg).

+0

Tuyệt vời, cảm ơn bạn! Điều này thật ý nghĩa. Tôi sẽ upvote câu trả lời của bạn kể từ khi bạn cung cấp một liên kết đến nguồn của bạn nhưng tôi vẫn có ít hơn 15 danh tiếng. Oh well. +1 – Burns

Các vấn đề liên quan