my %real_functions = (
wipe_system => sub { system "rm -rf /" },
);
my %debug_stubs = (
wipe_system => sub { warn "wiping system (no, not really)\n" },
);
my $funcs =
$debug
? \%debug_stubs
: \%real_functions;
$funcs->{'wipe_system'}->();
####
{
package SystemFunctions::Real;
sub wipe_system {
shift; # will be the class name
system "rm -rf";
}
}
{
package SystemFunctions::Debug;
sub wipe_system {
shift; # will be the class name
warn "wiping system (no, not really)\n";
}
}
my $funcs =
$debug
? 'SystemFunctions::Real'
: 'SystemFunctions::Debug';
$funcs->wipe_system();
##
##
my %dispatch = (
incr => sub { $x++ },
decr => sub { $x-- },
);
$dispatch{$op}->();
##
##
sub incr { shift; $x++ }
sub decr { shift; $x-- }
main->$op();