in reply to minimizing simple linear equations

You might find this helpful.
Evaluate Expressions. This is one of my favorite things I've ever written. It parses expressions and evaluates them. It's the basis for a mini language that got put on hold for some time.

In the evaulate sub, right after  @$ops = grep { defined $_ } @$ops; You basically have a parse tree.

For your example, you'd have
(foo*2) + (foo*3) $ops = [ [ 'foo', '*', '2' ], '+', [ 'foo', '*', '3' ] ];
You could modify it there to optimize the tree the way you w ant.

-Lee
"To be civilized is to deny one's nature."