2011-02-07 58 views
0

我不習慣Perl,但必須創建此函數。使用未初始化的值替換(s ///)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值有效。

謝謝。

回答

4

如果$ rs未定義,那麼它一定是因爲匹配「$rs =~ m!([0-9,]+) +EUR!;」失敗,而未定義$1。添加一些戰略性的打印報表應該有所幫助

+1

請注意,較早的替換也可能失敗;不會有任何警告。 – ysth 2011-02-07 04:47:38

1

如果錯誤就行

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

然後sendRequest失敗,導致$rs被不確定的。

該錯誤也可能是最後一次替換的錯誤,也就是說之前的比賽失敗。確保在條件語句中包裝匹配。

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