Factorial

Score: 54.13 (pass)

#!perl -l
$_*=$z,($z)=/(.{0,6}?)0*$/for($z=1)..pop;print$z%10

Score: 54.13 (pass)

Just some last-minute tiebreaker silliness.

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

Score: 56.13 (pass)

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

Score: 138.08 (fail)

Somehow I don't think this is ever going to get down to a reasonable length, but at least it works.

#!perl -l
sub'_{my($m,$n)=@_;$m=~s/.//||return;my$o=$&;my($p,$q)=split$o,$n;_(substr($m,0,length$p),$p)._(substr($m,length$p),$q).$o}print+_@ARGV