Perl管道日志脚本仅每2次点击运行一次

Perl管道日志脚本仅每2次点击运行一次,perl,apache2,logging,Perl,Apache2,Logging,我在Apache 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");} } #/usr/local/bin/perl $|=1; # 使用无缓冲输出 而()

我在Apache 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");}
}
#/usr/local/bin/perl
$|=1; # 使用无缓冲输出
而()
{
如果(~m/(.php |.html |.htm |.dhtml |.cpp |.h |.c |.txt |.pdf |.pl)$/)
{system(“beep”);}
}
我正在发送指令%f以给它文件名。可以看出,它会检查请求的文件名是否为内容文件。如果是这样,它会告诉系统发出嘟嘟声。然而,由于某些原因,服务器只会每两次访问内容页时发出嘟嘟声。有人知道为什么会这样吗


我很确定这与我使用
的方式有关,因为这是我的第一个Perl脚本。

使用while()读取第一行,然后在if()中读取另一行

将“if”更改为:if($\u=~…)

尝试:

while ( <> ) {
  system("beep") if /php|pl.../;
}
while(){
系统(“嘟嘟声”)如果/php | pl./;
}

这看起来干净多了,但我看不出if语句是如何进行比较的。你不需要找个地方吗?另外,您为什么被替换为just?/REGEXP/在默认情况下相当于$~=~/REGEXP/。表示在命令行中指定的所有文件,如果未指定任何文件,请参阅perldoc perlvar。查找ARGV。谢谢,我终于找到了它,因为缺少一个结束引号。@Cory:在for循环中,的每一行都被拆分为默认变量$\u0。如果您不给perl任何与正则表达式匹配的内容,则假定您要对默认变量$\u0执行匹配。这就是为什么perl如此优雅/不使用它的人讨厌它的部分原因。它的简单性增加了复杂性。或者,如果(/(.php |.html |.htm |.dhtml |.cpp |.h |.c |.txt |.pdf |.pl)$/)perl假定您的意思是在$|上进行匹配(如果未给出)。