Factorial

Score: 50.09 (pass)

well, duh, same optimisation on both holes, bonus...

#!perl -l
($z=$z*$_%1e6||1)=~s~0*$~~for 0..pop;print$z%10

Score: 52.10 (pass)

#!perl -l
$z=1;($z=$z*$_%1e6)=~s~0*$~~for 1..pop;print$z%10

Score: 53.10 (pass)

more tiebreaks...

#!perl -l
$_=1;for$z(1..pop){$_=$_*$z%1e6;s~0*$~~}print$_%10

Score: 53.12 (pass)

more whittling...

#!perl -l
$_=1;for$t(1..pop){$_=$_*$t%1e6;s/0*$//}print$_%10

Score: 53.13 (pass)

#!perl -l
$t=1;($t=$t*$_%1e6)=~s/0*$//for(1..pop);print$t%10

Score: 54.13 (pass)

whittling, whittling...

#!perl -l
$_=1;for$t(1..pop){($_*=$t)%=1e6;s/0*$//}print$_%10

Score: 55.12 (pass)

#!perl -l
$x=1;for(1..pop){(($x*=$_)%=1e6)=~s/0*$//}print$x%10

Score: 56.12 (pass)

#!perl -l
$x=1;for(1..pop){($x*=$_)=~s/0*$//;$x%=1e6}print$x%10

Score: 64.11 (pass)

#!perl -l
$x=1;for(1..pop){($x*=$_)=~s/.*?(.{1,6}?)0*$/$1/}print chop$x