Ошибка использования неинициализированного значения при замене (s///) в 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 допустимо.


person JCTLK    schedule 07.02.2011    source источник


Ответы (2)


Если $rs не определено, то это должно быть потому, что совпадение "$rs =~ m!([0-9,]+) +EUR!;" не удалось, в результате чего $1 осталось неопределенным. Добавление некоторых стратегических печатных заявлений должно помочь.

person Bill Ruppert    schedule 07.02.2011
comment
Обратите внимание, что более ранние замены также могли оказаться неудачными; никаких предупреждений не будет. - person ysth; 07.02.2011

Если ошибка в строке

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

затем sendRequest терпит неудачу, что приводит к неопределенности $rs.

Ошибка также может быть в строке последней замены, что означает, что предыдущее совпадение не удалось. Оберните совпадение в условный оператор, чтобы быть уверенным.

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