加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl,从正则表达式匹配赋值给变量

发布时间:2020-12-15 21:46:59 所属栏目:大数据 来源:网络整理
导读:我对perl相对较新,并且在 check_ilo2_health.pl中有一个代码片段,其中有一段语法,我不明白它是如何工作或为什么工作.代码片段逐行解析SSL客户端数据,在本例中为XML. if ( $line =~ m/MESSAGE='/) { my ($msg) = ( $line =~ m/MESSAGE='(.*)'/); #---- HERE i
我对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

有问题的XML示例:

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

所以在这种情况下,if语句采用XML样本的MESSAGE行.我知道我的($msg)将变量视为一种列表,我理解正则表达式是如何匹配的;但是,我不明白的是语法,以便将$msg分配给No error. perl似乎正在使用括号语法,这样才能实现.虽然它有效但我想知道它是如何工作的.任何援助将不胜感激.

解决方法

见 Perlretut,Extracting-matches:

… in scalar context,$time =~ /(dd):(dd):(dd)/ returns a true or false value. In list context,however,it returns the list of matched values ($1,$2,$3)

所以,在

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

($line = ~m / MESSAGE ='(.*)’/)返回捕获组的匹配列表.您有一个捕获组,因此其内容将存储在($msg)中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读