# untested, but close. $blocked = Cache::FileCache->new( cache_root => '/wherever/blocked_hosts', default_expires_in => '30 days', ) or die "no cache!\n"; sub block { # block($ip,$howlong) $blocked->set($_[0], 1, $_[1]); } sub is_blocked { # is_blocked($ip) -> undef or 1 $blocked->get($_[0]); } sub unblock { # unblock($ip) block($_[0], 'now'); # expire 'now', $ip go poof! } block('192.168.254.1'); # 30 days block('192.168.254.12','6 months'); deny_access if is_blocked('192.168.254.1'); unblock('192.168.254.1'); block('192.168.254.13', 'never'); # block forever!