1

在我的 Perl 程序中,我通过解码来阅读一封电子邮件,并将其拆分为一个数组。在下面的片段中,我正在阅读元素并附加它,直到找到“电子邮件”或“电话”或“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]是未定义的。添加一些打印语句以确定是否$j是您所期望的。如果它是错误的,那么找出为什么它以错误的值结束。这是对的,找出为什么$plain[$j]会得到错误的值。

于 2012-07-10T14:13:36.037 回答