sub is_abc { local $_ = shift || $_; $_ !~ /[^abc]/ } sub is_ab { local $_ = shift || $_; $_ !~ /[^ab]/ } #### sub has_odd_ab { local $_ = shift || $_; my $n = () = /ab/g; # count matches 1 & $n # odd? } #### sub odd_a { local $_ = shift || $_; 1 & tr/a//; } sub odd_b { local $_ = shift || $_; 1 & tr/b//; } #### sub prob_one { local $_ = shift || $_; is_abc and has_odd_ab; } sub prob_two { local $_ = shift || $_; is_ab and ! odd_a or odd_b; }