2009-05-21 25 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