2009-05-21 3 views
2

を実行しているログスクリプトをパイプ:Perlは私だけでは、Apache 2のパイプされたログ・セットアップのために、このスクリプトを使用していますすべての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を送っています。確認できるように、要求されたファイル名がコンテンツファイルであるかどうかを確認します。そうであれば、ビープ音が鳴るようにシステムに指示します。ただし何らかの理由で、コンテンツページにアクセスする2回ごとにビープ音が鳴ります。誰がなぜこれが起こるのか知っていますか?

これは私の最初のPerlスクリプトなので、<STDIN>を使用している方法とはかなり関係があります。

答えて

4

while()で最初の行を読み、if()で別の行を読み込みます。

変更]の場合」にします。if($ _ =〜...)

+1

それともあれば(/(.php|.html|.htm|.dhtml | .cpp | .h | .c | .txt | .pdf | .pl)$/perlは与えられていなければ$ _のマッチを行うことを意味します。 – Copas

4

試してみてください。

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

それはもっときれいに見えますが、if文がどのように比較しているかはわかりません。あなたは〜=どこかが必要ではないでしょうか?また、を<>だけに置き換えたのはなぜですか? –

+0

/REGEXP /はデフォルトでは$〜=〜/ REGEXP /に相当します。 <>はコマンドラインで指定されたすべてのファイル、またはファイルが指定されていない場合はを意味します。 – pts

+0

perldoc perlvarを参照してください。 ARGVを探してください。 –

関連する問題