1

私のPerlプログラムでは、電子メールをデコードして配列に分割することで電子メールを読んでいます。以下のスニペットでは、要素を読み、「Email」または「Phone」または「GoToAssist」が見つかるまで追加しています。

75  while(!($plain[$j] =~ /[Email|Phone|GoToAssist]/)){     
76      $plain[$x] .= " " . $plain[$j];
77      $j++;
78  }

ただし、次のエラーが発生します。

Use of uninitialized value in concatenation (.) or string at test.pl line 76, <GEN0> line 921.
Use of uninitialized value in pattern match (m//) at test.pl line 77, <GEN0> line 921.

以前はコードが正しく機能していましたが、ほとんど何も変更していません。何が悪かったのだろうか。

4

2 に答える 2

3

エラーではなく、警告です。

$plain[$j]が定義されていないため、この警告が表示されます。

次のコードを使用して、plain[$j]追加する前に が定義されているかどうかを確認できます。

while(!($plain[$j] =~ /[Email|Phone|GoToAssist]/)){     
     if(defined $plain[$j]){
         $plain[$x] .= "&nbsp;" . $plain[$j];
         $j++;
     }
 }

これで解決しない場合は、さらにコードを共有してください。

@Borodin が指摘したように、あなたの正規表現はおそらくあなたが望むことをしていません。しかし、これはあなたの質問とは関係ありません。

于 2012-07-10T14:36:20.743 に答える
0

$plain[$j]undef です。いくつかの print ステートメントを追加して、$j期待どおりかどうかを確認します。間違っている場合は、なぜ間違った値になってしまうのかを調べてください。そうです、なぜ$plain[$j]間違った値になってしまうのかを調べてください。

于 2012-07-10T14:13:36.037 に答える