DNSBLでspam除け

放置してた掲示板が、最近spamでウザくなってきたのでDNSBLで撥ねることにする。あのスクリプトPHPやったっけ、とか思ってたらPerlやった。Perl使ったことねぇー、と思いつつ適当に勉強して実装した。

sub CheckIP
{
  my $addr, $rev_addr, $uri, @rbl_server;
  
  $addr = $ENV{'REMOTE_ADDR'};
  $rev_addr = join('.', reverse(split(/\./, $addr)));
  @rbl_server = ('niku.2ch.net', 'list.dsbl.org', 'bsb.spamlookup.net');
  foreach(@rbl_server){
    $uri = $rev_addr . "." . $_;
    if( join('.', unpack("C*", gethostbyname($uri))) =~ m/^127.0.0./ ){
      return 1;
    }
  }
  return 0;
}

超適当。他のサブルーチンとの兼合いで返り値は見つかったとき0でなかったとき1。誤解を招くのでやめ。
どうでもいいけど、PerlのModuleって最後に1書かんといかんのか…?ないとrequireするときに失敗するんですけど。なんかかっこ悪い。