while 루프 내에서 서로 다른 두 문자열의 첫 번째 인스턴스를 찾는 가장 쉬운 방법은 무엇입니까? 두 문자열에 대한 즉석에서 로그를 검색 중이며 문자열의 순서는 필수적이지 않으며 언제든지 발생할 수 있습니다. 그러나 때로는 로그의 아래쪽에 동일한 문자열의 인스턴스가 추가되기도하므로 두 문자열의 첫 번째 인스턴스 만 수집하고 필요한 타임 스탬프를 수집하기를 원합니다. 이 (정규식) 트리거 올바른 문자열과 일치 할 때 스크립트가 성공적으로 작품을 좋아하고,while 루프 내에서 두 문자열 일치의 첫 번째 인스턴스
while(<$log_DUT>) {
$fh_DUT->print($_);
if (m/<\sOPERATOR\s\{[^,]+,\s[^,]+,\s\d+\}\s\[SUB0\]/){
$dsub1found = 1;
open (DUTfFILE, ">>", "$TimeDutfsub1");
print DUTfFILE DUTcurTime(),"\n";
close (DUTfFILE);
}
if (m/<\sOPERATOR\s\{[^,]+,\s[^,]+,\s\d+\}\s\[SUB1\]/){
$dsub2found = 1;
open (DUTfFILE, ">>", "$TimeDutfsub2");
print DUTfFILE DUTcurTime(),"\n";
close (DUTfFILE);
}
last if ($dsub1found & $dsub2found == 1);
}
지금까지 IS이 코드는 ... 그러나 그것은 동일한 문자열의 추가 인스턴스를 캡처 계속, 타임 스탬프를 캡처해야 루프는 여전히 두 번째 정규식 문자열을 기다려야합니다 (반대의 경우도 마찬가지입니다).
예를 들어 $ dsub1found! = 1 인 경우 if 문을 시작했지만 행운이 없으면 문자열이 발견되지 않고 스크립트가 시간 초과되었습니다.
다른 걱정거리는 동일한 while 루프에서 두 개의 문자열 검색을하는 것이 현명한 방법인지 여부에 관한 것입니다. 이 글을 읽고에 대한
덕분에, MikG
이케 가미 덕분에, 이것은 제가 생각했던 것과 같습니다. 이 반복은 순수하게 Perl의 초보자이기 때문에 가능하지만 결국 연습을 통해 나중에 스크립트를 단축하여 효율적으로 만들 수있게됩니다. 그러나 그것이 그렇듯이 지금은 반복적 인 형식으로 작업하는 것이 내 이해에 더 분명합니다. 나는 단축 스크립트를 시도했지만 '$ TimeDutfsub $ n'은 '$ TimeDutfsub'가 정의가 필요하다는 것을 의미합니다. – MikG
Re "반복은 순수하게 Perl을 사용하는 초보자이기 때문에입니다."미안하지만, 나는 수사학 적이라는 의미였습니다. . 나는 "그 반복을 모두 없애기는 쉬울 것입니다." – ikegami
Re'$ TimeDutfsub','$'의 앞부분에 눈치 채지 못했는데,'TimeDutfsub1'과'TimeDutfsub2'라는 파일을 만들었다 고 생각했습니다. 배열을 사용해야한다. my @TimeDutfsub = (..., ...);''$ TimeDutfsub [$ n]'을 사용한다. – ikegami