內的兩個字符串匹配的第一個例子,我希望要問什麼最簡單的方法找到一個while循環中幾個不同的字符串的第一個實例。我正在尋找兩個字符串的日誌,字符串的順序不是必需的,可以隨時發生。不過,偶爾也有相同的字符串進一步下跌的日誌(一審)之後的又一實例,所以我希望能只收集兩個字符串的第一個實例,並收集必要的時間戳。該代碼我有多遠......Perl中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);
}
腳本工程確定,併成功捕獲時間戳,當它正確的字符串(正則表達式)觸發相匹配,但它繼續捕捉相同的字符串的進一步實例應的循環仍然需要等待第二個正則表達式字符串(反之亦然)。
我開始if語句(例如),如果$ dsub1found!= 1,但沒有運氣,字符串永遠找不到,我的腳本超時。
其他擔心,我不得不爲它是否是明智的做一對夫婦的字符串搜索在同一個while循環。
感謝您閱讀此, MikG
謝謝池上,這看起來是我以後的事情。重複僅僅是因爲我是一名Perl初學者,但最終通過練習,我希望將來能夠縮短我的腳本以提高效率。但事實證明,我現在對重複性格式的理解更爲清晰。我嘗試了你的簡短腳本,但是它在'$ TimeDutfsub $ n'處摔倒了,'$ TimeDutfsub'需要定義 – MikG
Re「重複純粹是由於我是一個Perl初學者」,對不起,我的意思是修辭。我可以這樣說:「但是消除所有這些重複會很容易, – ikegami
Re'$ TimeDutfsub',我沒有注意到前面的'$',我以爲你創建了名爲'TimeDutfsub1'和'TimeDutfsub2'的文件。必須使用一個數組'my @TimeDutfsub =(...,...);'並使用'$ TimeDutfsub [$ n]'(更新答案以使用數組)。 – ikegami