在Perl中使用未初始化的值警告

时间:2014-03-03 00:06:55

标签: perl

我有以下几行代码,

foreach ($abc) {
    my ($match) = $_ =~ /([0-9]{5}(?!.*([0-9]{5})))/;
    $zipCode_count{$match} += 1 if $match ne '';
}

当我执行它时,它会不断发出警告:

  

在parseZipCode.pl行的字符串ne中使用未初始化的值$ match   8,第51行。

我该怎样摆脱它?感谢

1 个答案:

答案 0 :(得分:2)

如果正则表达式匹配失败,

$match将为undef$match没有办法成为空字符串。

建议修复:如果匹配失败,则跳过循环:

my ($match) = /(...)/ or next;
$zipCode_count{$match}++;

或者,将条件更改为

$zipCode_count{$match}++ if defined $match;

补充说明:

  • 增量++通常优于+= 1
  • 正则表达式默认匹配$_
  • zipCode_count是一个非常可怕的变量名称 - 使用camelCase snake_case,但请不要同时使用这两个名称!