CentOS 커널 2.6.18-308.8.1.el5의 PERL (5.8.8)이 잘못된 '초기화되지 않은 변수'경고를 내고 있다고 생각합니다. 내 모든 검색은 합법적 인 초기화되지 않은 가치 문제를 나타냅니다. 아마도 내 것이고, 그렇다면 어떻게되는지에 대한 설명 (그리고 내가하려는 일을 올바르게 수행하는 방법)은 대단 할 것입니다. 나는 또한 hex()에 대한 많은 참조와 올바른 함수 인자 관용구를 살펴 보았고, 나는 그 모든 것을 올바르게 수행하고 있다고 생각한다."초기화되지 않은 값"false positive
내 스크립트는 2 개의 텍스트 파일을 읽습니다. 하나는 32 비트 하드웨어 주소를 포함하고 다른 하나는 그 주소에서 다시 읽는 32 비트 데이터를 포함합니다. 각 파일의 값은 항상 길이가 8 자리의 16 진수이며 두 파일은 100 % 일치합니다 (주소 파일의 1 번 줄은 데이터 파일의 1 번 줄과 일치 함). 데이터 값이있는 경우 비 제로 다 괜찮지 만, 데이터 값이 0 때 경고 얻을 :
Use of uninitialized value in string eq at ../VMetro_Parser.pl line 248.
Use of uninitialized value in hex at ../VMetro_Parser.pl line 250.
관련 코드 :
sub ppReg_TX_Mode_Reg {
my($data) = @_; # first arg should be the Data field
my $ret = "\t";
if($data eq "00000000") { print "TX_Mode_Reg got 0 input\n"; } #LINE 248
#croak("data not defined!") unless defined $data;
my($hex) = hex($data); #LINE 250
$ret .= sprintf("Clear INTs: %02X ", (($hex >> 25) & 0x7F));
입력 예상 된 동작이 생성
을 PERL 스크립트의Address: 90000004
Data: 00000004
출력 :
90000004 00000004 -> Wr TX00 Mode_Reg
Clear INTs: 00
,691,363 PERL 스크립트의
Address: 90000004
Data: 00000000
출력 : 예상치 못한 '초기화되지 않은 값'경고 생산 (210)
입력 분명히
90000004 00000000 -> Wr TX00 Mode_Reg
TX_Mode_Reg got 0 input
Clear INTs: 00
, 그것은 인수가 문자열 "00000000"아직이로 전달 인식에있다 또한 그것이 undef (내가 그것을 주석을 제거한다면 사기꾼 선은 불)다고 생각한다. 뭐라 구요?
하나의 흥미로운 점은 데이터의 다른 인스턴스가 0이지만 경고가 표시되지 않는다는 것입니다. 이 다른 0 데이터는 다른 함수에 의해 처리되고 경고를 throw하는 줄 다음에 발생하지만 처리는 동일합니다 (경고로 인해 추가 된 위의 코드에서 명백한 디버그 작업은 제외).
E.G.
sub ppReg_RX_Master_Mode_Reg {
my($data) = @_; # first arg should be the Data field
my $ret = "\t";
my($hex) = hex($data);
경고를 표시하지 않습니다.
결과물에 어떤 경고가 표시되지 않습니까?!?! – ikegami
언어 이름은 "Perl"입니다. 두문자어가 아닙니다. – ikegami
'Use Devel :: Peek qw (덤프); 덤프 ($ 데이터);'(비교 전)는 도움이 될 수 있습니다. – ikegami