Bur*_*rns 5 regex syntax perl variable-assignment parentheses
我对perl相对比较新,在check_ilo2_health.pl中有一段代码示例,其中有一段语法,我不明白它是如何工作的或原因.代码片段逐行解析SSL客户端数据,在本例中为XML.
if ( $line =~ m/MESSAGE='/) {
my ($msg) = ( $line =~ m/MESSAGE='(.*)'/); #<---- HERE
if ( $msg !~ m/No error/ ) {
if ( $msg =~ m/Syntax error/ ) { #...etc
Run Code Online (Sandbox Code Playgroud)
有问题的XML示例:
<RESPONSE
STATUS="0x0000"
MESSAGE='No error'
/>
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,if语句采用XML样本的MESSAGE行.我知道我的($ msg)将变量视为一种列表,我理解正则表达式是如何匹配的; 不过,我不明白的是这样的语法$味精被分配到没有错误.perl似乎正在使用括号语法,这样才能实现.虽然它有效但我想知道它是如何工作的.任何援助将不胜感激.
ste*_*ema 10
参见Perlretut,Extracting-matches:
...在标量上下文中,
$time =~ /(\d\d):(\d\d):(\d\d)/返回true或false值.但是,在列表上下文中,它返回匹配值的列表($1,$2,$3)
所以,在
($msg) = ( $line =~ m/MESSAGE='(.*)'/);
Run Code Online (Sandbox Code Playgroud)
( $line =~ m/MESSAGE='(.*)'/)返回捕获组的匹配列表.您有一个捕获组,因此其内容将存储在($ msg)中.
| 归档时间: |
|
| 查看次数: |
7182 次 |
| 最近记录: |