2009-05-21 78 views
2

我使用這個腳本在Apache 2的一個管道日誌設置:管道的Perl腳本日誌僅運行,每2次點擊

#!/usr/local/bin/perl 

$|=1; # Use unbuffered output 
while (<STDIN>) 
{ 
    if (<STDIN> =~ m/(.php|.html|.htm|.dhtml|.cpp|.h|.c|.txt|.pdf|.pl)$/) 
     {system("beep");} 
} 

我送的指令%F給它的文件名。正如你所看到的,它會檢查所請求的文件名是否是內容文件。如果是這樣,它會告訴系統發出嘟嘟聲。但是,由於某些原因,服務器只會每兩次發出一次內容頁面的蜂鳴聲。有誰知道爲什麼會發生這種情況?

我很確定它與我使用的方式<STDIN>有關,因爲這是我的第一個Perl腳本。

回答

4

您用while()讀取第一行,然後在if()中讀取另一行。

更改 '如果' 來的:if($ _ =〜...)

+1

或者只是如果(/(.php|.html|.htm|.dhtml | .cpp | .h | .c | .txt | .pdf | .pl)$ /)perl假定您的意思是在$ _上進行匹配,如果沒有給出。 – Copas 2009-05-21 00:36:22

4

嘗試:

while (<>) { 
    system("beep") if /php|pl.../; 
} 
+0

看起來很乾淨,但我不明白if語句如何進行比較。你不需要〜=某處嗎?另外,你如何將替換爲<>? – 2009-05-21 00:20:53