NAME
Sub::Disable - remove function/method call from compiled code
SYNOPSIS
use Sub::Disable 'debug', 'foo', 'bar'; # without specification - both method + sub form calls
use Sub::Disable method => ['debug'];
use Sub::Disable sub => ['debug'];
use Sub::Disable {
method => ['foo'],
sub => ['bar'],
};
sub debug { warn "DEBUG INFO: @_" }
__PACKAGE__->debug(some_heave_debug()); # no-op
debug(even_more(), heavier_debug()); # no-op
DESCRIPTION
This module allows you to turn compile-time resolvable function or method call into no-op (together with all arguments' computations). This is useful for debugging and/or logging, when you don't want to make your production code slower.
Note that 'compile-time resolvable method call' is a method call on a literal package name
Some::Package->method
# or
__PACKAGE__->method
and does not consider inheritance.
Sub::Disable distinguishes between sub and method calls and, by default, removes both of them. If you want to remove only one type - use appropriate form of import.
PERFORMACE
There's zero runtime overhead. Compile time overhead is negligible - on a test run it took additional 0.2 ms during compilation for a large-scale project with 1200+ modules loaded.
CAVEATS
Sub::Disable will remove only those sub/method calls that were compiled after you have use'd it.
If you use Sub::Disable together with namespace::clean and you want to remove some function as a sub call, but not as a method call, you should use Sub::Disable after using namespace::clean or exclude that method with '-except'.
SEE ALSO
B::Hooks::OP::Check and various OP_check[] related core stuff.
COPYRIGHT AND LICENSE
Copyright (C) 2015 by Sergey Aleynikov
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.1 or, at your option, any later version of Perl 5 you may have available.