Factorial

Score: 48.12 (pass)

#!perl -l
$_*=$}%1e6,/0*$/,$}=$`for++$}..pop;print$}%10

Score: 49.10 (pass)

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

Score: 49.12 (pass)

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

Score: 50.10 (pass)

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

Score: 51.11 (pass)

This solution is longer than my best one, unfortunately $` is not global

#!perl -l
($`*$_%1E6||1)=~/0*$/,$~=$`for$~..pop;print$~%10

Score: 51.12 (pass)

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

Score: 55.12 (pass)

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

Score: 57.10 (pass)

Same thing a bit shorter

#!perl -l
$_=1;s~.*([^0])~$&*$}%9e9~ewhile$}++<=$ARGV[0];print$1

Score: 57.10 (fail)

I wonder if this one really works - I only had the time for the first 14 tests ;)

#!perl -l
$_=1;s~([^0])+~$&*$}%1e6~egwhile$}++<=$ARGV[0];print$1

Score: 60.14 (pass)

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

Score: 61.11 (pass)

Just another nice solution, a bit too long though...

#!perl -l
$_=1;z while s~.*([^0])~$}++<$ARGV[0]?$&*$}%9e9:!print$1~e