Использование неинициализированного значения в ошибке подстановки (s ///) в PERL - PullRequest
0 голосов
/ 07 февраля 2011

Я не привык к 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 ]

4 голосов
/ 07 февраля 2011

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

1 голос
/ 07 февраля 2011

Если ошибка находится в строке

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

, то sendRequest завершается ошибкой, что приводит к неопределенности $rs.

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

if ( $rs =~ m!([0-9,]+) +EUR! ) {
    $rs = $1;
} else {
    die "no matching";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...