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
In reply to Re: Re: Re: Re: Dice calcs?
by Anonymous Monk
in thread Dice calcs?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |