5

私は perl に比較的慣れていませんが、check_ilo2_health.plにコードのサンプル スニペットがあり、どのように、またはなぜ機能するのか理解できない構文があります。コード スニペットは、SSL クライアント データ (この場合は XML) を 1 行ずつ解析しています。

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行を使用します。my ($msg)が変数を一種のリストとして扱い、正規表現がどのように一致するかを理解しています。しかし、私が理解していないのは、$msgNo errorに割り当てられるような構文です。perl は、これを機能させるために括弧構文などをいじっているようです。それが機能している間、私はそれがどのように機能するか知りたいです。任意の支援をいただければ幸いです。

4

1 に答える 1

10

Perlretut、Extracting-matchesを参照してください:

...スカラーコンテキストで$time =~ /(\d\d):(\d\d):(\d\d)/は、trueまたはfalseの値を返します。ただし、リストコンテキストでは、一致した値のリストが返されます($1,$2,$3)

だから、

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

( $line =~ m/MESSAGE='(.*)'/)キャプチャグループによる一致のリストを返します。キャプチャグループが1つあるため、そのコンテンツは($ msg)に保存されます。

于 2013-02-05T20:17:43.963 に答える