2013-02-05 51 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