#summary The principles of Test::Builder and Test::More. = Introduction = Some core principles guiding the development of Test::Builder and Test::More. === Non-Interference === Code should work just the same in a test script as in a normal script. For example, you might be tempted to write a test routine which uses the & prototype to accept a "block" that's really a subroutine reference. {{{ sub run (&) { my $code = shift; $code->(); } run { ...test code... }; }}} The fact that it's not really a block can be seen by anything which uses `caller()`. Consider testing Carp. To complete the encapsulation you have to trick `caller()` by using something like `Sub::Uplevel`.