my @b = ('5', '/', '6', '3', 'X', 'X', '7', '0', '4', '3', 'X', '4', '/', '8', '1', '3', '/', '6'); print "Frame tog ball score total\n"; print score(@b),"\n\n"; print "Frame tog ball score total\n"; print score(('X')x12); sub score { \$i=0;\$f=1;\$t=1;\$score=0; for (@_) { last if \$f>10; if(/X/) { \$s=10+n(\$_[\$i+1])+n(\$_[\$i+2]); \$t=1 } elsif(/\//) { \$s=10+n(\$_[\$i+1]); \$t=1 } else { \$s=\$_; \$t^=1 # flip the toggle with XOR } \$score+=\$s; printf "%2d %d %s %2d %3d\n",\$f, \$t, \$_, \$s, \$score; \$t&&\$f++; # count the frames \$i++; } sub n{\$v=pop;\$v=~/[X\/]/?10:\$v} return \$score } __END__ Frame tog ball score total 1 0 5 5 5 1 1 / 16 21 2 0 6 6 27 2 1 3 3 30 3 1 X 27 57 4 1 X 17 74 5 0 7 7 81 5 1 0 0 81 6 0 4 4 85 6 1 3 3 88 7 1 X 24 112 8 0 4 4 116 8 1 / 18 134 9 0 8 8 142 9 1 1 1 143 10 0 3 3 146 10 1 / 16 162 162 Frame tog ball score total 1 1 X 30 30 2 1 X 30 60 3 1 X 30 90 4 1 X 30 120 5 1 X 30 150 6 1 X 30 180 7 1 X 30 210 8 1 X 30 240 9 1 X 30 270 10 1 X 30 300 300