my @tests = \( &T::test0, &T::test1, . . . ); #### $test->($t); # Sending the $t object as the first arg... #### . . . unless eval "\$t->$test()"; #### sub create_closure { my $t = shift; my $m = shift; my $r = eval 'sub { $t->' . $m . '() }'; } #### my @execute{@tests} = map { create_closure( $t, $_ ) } @tests; #### foreach my $test (@tests){ if($mask & $byte{$test}){ $mask = $mask ^ $byte{$test} unless &$execute{$test}; #if the test returned false we unset the bit } }