
use lib 'lib';
use Hook::WrapSub qw( wrap_subs unwrap_subs );

my $result = '';

sub Quux::foo { $result .= "foo(@_)\n" }

my $obj = bless {}, 'Quux';

my $obj_str = quotemeta($obj);

wrap_subs
  sub { $result .= " 0B(@_)[@Hook::WrapSub::caller[5]]\n" },
  'Quux::foo',
  sub { $result .= " 0A(@_)[@Hook::WrapSub::caller[5]]\n" }
  ;

$r = $obj->foo( "'0'" );
$result .= "\n";

wrap_subs
  sub { $result .= " 1B(@_)[@Hook::WrapSub::caller[5]]\n"; splice @_, 1, 1, "'X'"; },
  'Quux::foo',
  sub { $result .= " 1A(@_)[@Hook::WrapSub::caller[5]]\n" }
  ;

@r = $obj->foo( "'1'" );
$result .= "\n";

unwrap_subs 'Quux::foo' ;

$obj->foo( "'2'" );
$result .= "\n";

unwrap_subs 'Quux::foo' ;

$obj->foo( "'3'" );
$result .= "\n";

$result =~ s/\s*$obj_str\s*//g;

print $result;

