내 스크립트로 들어오는 로그 라인을 배열 참조로 파싱하려고합니다.Perl- 배열 참조를 역 참조하고 변수에 결과를 할당하면 결과 값이 1 인 변수가됩니다.
이 로그 라인이 특정 값을 추출하기 위해 전달되는 또 다른 서브 루틴이 있지만 함수가 로그 라인을 수신하지 않고 값 1을 얻는 것처럼 보입니다.이 작업은 배열 ref를 역 참조하려고 할 때 발생합니다. 그것을 스칼라에도 할당하십시오. 서브 루틴 호출이
print Dumper ($logline)
$VAR1 = '2013-06-07 17:22:32.219 <TID 1B344> [uss_smm.reqserv] 162.34.22.1: "POST /ts/start/67257-v/827987/ts/june7test1/backup/20130fd83788-02-ts&action=setarchiver×tamp=1370625752.172546&as=new2 HTTP/1.1" 200 - Success.';
Assigning the dereferenced value to scalar -
my $temp_line = @{ $logline };
print "temp_line is $temp_line \n";
temp_line is 1
- - 같은
로그 라인이 보이는
my $arch = parse_Smmlog_Arch_Comm(@{ $logline });
분석을위한 서브 루틴은 -
sub parse_Smmlog_Arch_Comm($){
my $logline = shift;
print Dumper ($logline);
test_log(INFO,"in parse_Smmlog_Arch(), logline is - $logline ");
my @arr = split('&as=',$logline);
my @sec_arr = split(' ',$arr[1]);
return $sec_arr[0];
}
내가 스크립트를 실행에이를 얻을, 서브 루틴이 로그 라인을 수신하지 않기 때문입니다.
Use of uninitialized value in split at /Users/myname/parseLog.pl
감사합니다.
덕분에 다른 일을 의미 같은 변수 이름을 가지고! 이전에 Dumper 출력에 실수가있었습니다. 참으로 배열 참조였습니다. 나는 print $ logline을 할 때 ARRAY (0x7f9d6c6f5278)를 얻었 기 때문에 이것을 확신한다. $ {$ logline} [0] 트릭을했습니다. – sudologin
또한 항상 엄격한 경고를 사용합니다. 그 교훈을 얼마 전에 배웠습니다. – sudologin