The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Sub::Installer;
use Test::More 'no_plan';
use warnings;

my $ok = q{ ok $_[0], $_[1] };
my $is = q{ is $_[0], $_[1], $_[2] };

my $sub_ref = main->install_sub({ ok1 => $ok, ok2 => $is });

ok1(1                                    => 'first installed sub runs');
ok2(2,2                                  => 'second installed sub runs');

$SIG{__WARN__}
    = sub { ok 0 => "warned unexpected: @_" if $_[0] =~ /redefined/ };

$sub_ref = main->reinstall_sub({ ok1 => $is, ok2 => $ok });

ok1(2,2                                  => 'first reinstalled sub runs');
ok2(2                                    => 'second reinstalled sub runs');

ok !eval{$sub_ref = main->reinstall_sub({ ok1 => $is.'%^&%#@^&#%' }) }
                                         => 'bad code failed as expected';

like $@, qr/Can't install invalid code/  => 'failed with correct message';