The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#
# $Id: block_by_default.pl,v 1.1 2007/05/22 13:40:53 erwan_lemonnier Exp $
#
# An example on how to use Hook::Filter to block all calls
# to a function debug() by default.
#

use strict;
use warnings;
use lib "../lib/";

#-----------------------------------------------
# a logging package

package My::Log;

sub debug {
    print "_debug() got: ".$_[0]."\n";
}

#-----------------------------------------------

package main;

# filter calls to subroutine 'My::Log::_debug'
use Hook::Filter hook => "My::Log::debug";

# calls are still allowed by default since no rules are registered yet:
My::Log::debug("this is logged since no rules are defined yet");

# block all calls to _debug() by default
use Hook::Filter::RulePool qw(get_rule_pool);
my $pool = get_rule_pool;
$pool->add_rule("0");

# this won't be printed: the only rule registered returns 0, hence
# blocking calls to _debug:
My::Log::debug("you won't see this");
My::Log::debug("nor this");

# now allow calls only if they are from function foo() in package main
$pool->add_rule("from eq 'main::foo'");

sub foo {
    My::Log::debug($_[0]);
}

My::Log::debug("this message is not logged");
foo("this message is logged, since debug() is called from main::foo()");