【问题标题】:Use of uninitialized value in substitution (s///) error in PerlPerl 中使用未初始化值替换 (s///) 错误
【发布时间】:2021-03-10 04:42:40
【问题描述】:

我不习惯 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 值有效。

【问题讨论】:

    标签: regex perl


    【解决方案1】:

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

    【讨论】:

    • 请注意,早期的替换也可能失败;不会因此产生任何警告。
    【解决方案2】:

    如果出错就行了

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多