Still not short enough...
#!perl -pl $*='(\w+)';$/='([()+-]|^|$)';1while s/\($*\)|\s/$+/|s#([^\d)])(-\d+)|$/$*(([*/])$*|([+-])$*$/)#"$1$3_".(push@/,$5?"$4 $7$9 $6$8":$+).$10#e;1while s#_$*#$/[$+-1]# |
#!perl -pl $w='(\w+)';$/='([()+-]|^|$)';$e='push@_,$3?"$2 $5$7 $4$6":$2;"$1_$#_$8"';1 while s/(\($w\)|\s)/$2/|s/([^\d)])(-\d+)/$e/ee|s#$/$w(([*/])$w|([+-])$w$/)#$e#ee;1 while s/_$w/$_[$+]/ |