Factorial

Score: 58.09 (pass)

Merge two expressions into one, saving 2 more characters.

#!perl -l
$z=pop;$_=1;while($z){s|0$||;$_=$_*$z--%1e9}print chop;

Score: 60.09 (pass)

#!perl -l
$z=pop;$_=1;while($z){$_*=$z--;s|0$||;$_%=1e9}print chop;

Score: 61.12 (pass)

Use $_. Duh.

#!perl -l
$z=pop;$_=1;while($z){$_*=$z--;s/0*$//;$_%=1e9}print$_%10;

Score: 67.10 (pass)

Minor tweaks to variable names to improve tiebreaker values

#!perl -l
$z=pop;$y=1;while($z){$y*=$z--;$y=~s/0*$//;$y%=1e6}print chop$y;

Score: 67.11 (pass)

Realized I left a 2-character piece of the previous regex version.

#!perl -l
$a=pop;$b=1;while($a){$b*=$a--;$b=~s/0*$//;$b%=1e6}print chop$b;

Score: 69.11 (pass)

Second working version; first had a longer regexp to strip it down to 6 characters max instead of the %=.

#!perl -l
$a=pop;$b=1;while($a){$b*=$a--;$b=~s/0*$/$1/;$b%=1e6}print chop$b;