在PERL中使用未初始化的值替换(s ///)错误

时间:2011-02-07 04:24:17

标签: regex perl

我不习惯Perl,但必须创建这个功能。

sub getPrice {
   my $url = shift;
   my $prdid = shift;
   my $count = shift;
   my $totcount = shift;

   print "($count/$totcount) Fetching Product Price : $prdid .";    
   my $rs = sendRequest('GET', $url);
   print "url :".$url;
   print "..\n";

   $rs =~ s!.*Unit Price Excl. VAT!!s;
   $rs =~ s!</table>.*!!s;

   $rs =~ m!([0-9,]+) +EUR!;
   $rs = $1;
   $rs =~ s/,/./;

   return $rs;
}

当我调用此函数时,我收到此错误。

Use of uninitialized value in substitution (s///)

错误指出$rs =~ s/,/./;行。

我替换它的方式有错误吗?

$ url值有效。

感谢。

2 个答案:

答案 0 :(得分:4)

如果$ rs未定义,则必须是因为匹配“$rs =~ m!([0-9,]+) +EUR!;”失败,而$1未定义。添加一些战略性印刷报表应该会有所帮助。

答案 1 :(得分:1)

如果错误在行

$rs =~ s!.*Unit Price Excl. VAT!!s;

然后sendRequest失败,导致$rs未定义。

错误也可能在最后一次替换上,这意味着先前的匹配失败。在条件语句中包装匹配以确保。

if ( $rs =~ m!([0-9,]+) +EUR! ) {
    $rs = $1;
} else {
    die "no matching";
}