2011-02-07 4 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은 정의되지 않은 채로 있어야합니다. 전략적 인쇄 문을 추가하면 도움이됩니다. 오류 $rs 선도

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

다음 sendRequest 실패 라인에있는 경우

+1

이전 대체가 실패했을 수도 있습니다. 그로 인한 경고는 없습니다. – ysth

1

은 미정의된다.

오류는 마지막 대체 작업의 온라인 상태 일 수도 있습니다. 이는 이전 일치가 실패했음을 의미합니다. 조건문에 반드시 일치하는 것을 넣으십시오.

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