2011-02-07 19 views
0

私はPerlに慣れていないが、この関数を作成しなければならなかった。PERLでの初期化されていない値の使用(s ///)

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

1

エラーがライン上

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

であれば、sendRequestは未定義であること$rsにつながる、失敗します。

このエラーは、前回の置換が失敗したことを意味する最後の置換の行にある可能性もあります。条件文にマッチをラップしてください。

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