in reply to Re: Re: Re: Dice calcs?
in thread Dice calcs?

I handled the matching parens in the subroutine.

Your fix to precedence 3 still isn't going to work:

my $x = '20*5/3*3'; $x =~ s/(\d+)([\*\/])(\d+)/int(eval("$1$2$3"))/eg; print "$x\n"; Output: 100/9

I'm okay for the moment with non-shared precedence. That's what parens are for. :-)

I also changed some of the logic in the determine sub, because as you can see from above, one s/// pass isn't always enough. I didn't want lower-precedence operators being evaluated before all of the higher-precedences had been taken care of. That helped with the unary - problem... I made - a higher precedence than + and tweaked the rx's slightly.

The only bit I have left to do (when I can find time) is to add a pre-parser similar to my infix-to-postfix program that will go a long way to validating syntax (but this isn't exactly a mission-critical module either :-)

Thanx!
Matt Stum