2014-06-23 52 views
0

有人能解釋我如何理解代碼 的代碼是從pfLogSumm.pl提取postfix郵件日誌分析的這部分理解這個正則表達式在Perl沒有分配

while(<>) { 
    next if(defined($dateStr) && ! /^$dateStr/o); 
    s/: \[ID \d+ [^\]]+\] /: /o; # lose "[ID nnnnnn some.thing]" stuff 
    my $logRmdr; 

    more code 

} 

我無法理解什麼正則表達式正在做,因爲沒有一個任務,沒有條件,簡單是有

+0

'next ../^$ dateStr /'如果'$ dateStr'未定義,則不執行任何操作。很老的Perl,順便說一句。 –

回答

1

默認情況下,正則表達式(和許多其他功能)上運行$_。所以

s/: \[ID \d+ [^\]]+\] /: /o; 

等同於:

$_ =~ s/: \[ID \d+ [^\]]+\] /: /o; 

這隻有:輸入線替換: [ID number ...]

這是一個常見的習慣用法,你應該在許多Perl腳本中看到,你應該習慣它。

+0

謝謝巴爾馬!解決了! – DiegoR

+0

請再提一個問題! Wath正在做正則表達式?更換? extractng?什麼是ab/o修飾符?再次感謝!! – DiegoR

+0

它取代了某些東西 - 這就是///的意思。 'o'修飾符告訴Perl編譯RE,但它現在被認爲是過時的。見http://stackoverflow.com/questions/550258/does-the-o-modifier-for-perl-regular-expressions-still-provide-any-benefitit – Barmar