2013-02-05 94 views
5

我對perl比較陌生,在check_ilo2_health.pl中有一段代碼片段,其中有一段語法,我不明白它是如何工作的或爲什麼工作的。代碼片段是逐行解析SSL客戶端數據,在這種情況下是XML。Perl,分配給來自正則表達式匹配的變量

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

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

有問題的XML的一個例子:

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

因此,在這種情況下,如果聲明採取MESSAGE線XML樣本。我知道我的($味精)將該變量視爲一種列表,我理解正則表達式如何匹配;但是,我不明白的是這樣的語法:$ msg分配的沒有錯誤。 perl似乎在使用括號語法來操作,這樣才能工作。雖然它的作品,我想知道它是如何工作的。任何援助將不勝感激。

+0

如果您指的是'=〜'或'!〜',那麼[綁定操作符](http://perldoc.perl.org/perlop.html#Binding-Operators)。 –

回答

10

Perlretut, Extracting-matches

...在標量上下文,$time =~ /(\d\d):(\d\d):(\d\d)/返回一個true或false值。在列表環境,但是,它返回匹配的值($1,$2,$3)

這樣的名單,在

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

($line =~ m/MESSAGE='(.*)'/)由捕獲組返回匹配的列表。你有一個捕獲組,所以它的內容存儲在($ msg)中。

+0

完美,謝謝!這是有道理的。由於你提供了一個鏈接到你的來源,我會加快你的回答,但是我的聲望還不到15。好吧。 +1 – Burns