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

Regex 在Perl中的替换(s//)错误中使用未初始化值,regex,perl,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

我不习惯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;
}
错误指出了
$rs=~s/,/

我替换它的方式有错误吗


$url值有效。

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

如果$rs未定义,那一定是因为匹配“
$rs=~m!([0-9,]+)+EUR!;
”失败,留下了
$1
未定义。添加一些策略性的打印语句应该会有所帮助。

如果错误在行

$rs =~ s!.*Unit Price Excl. VAT!!s;
然后
sendRequest
失败,导致
$rs
未定义

错误也可能出现在最后一次替换的第行,这意味着之前的匹配失败。将匹配项包装在条件语句中以确保

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

如果错误在线路上

$rs =~ s!.*Unit Price Excl. VAT!!s;
然后
sendRequest
失败,导致
$rs
未定义

错误也可能出现在最后一次替换的第行,这意味着之前的匹配失败。将匹配项包装在条件语句中以确保

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

注意,先前的替换可能也失败了;这不会导致任何警告。请注意,早期的替换可能也失败了;这不会导致任何警告。