#!/usr/bin/perl use Math::Expression; my $expr = Math::Expression->new; my $tree = $expr->Parse( "8*1024**3" ); my $answer = $expr->EvalTree( $tree, 0 ); print "My answer is $answer\n"; #### 58,59c58,59 < my $HighestOperPrec = 15; < my $PrecTerminal = 16; # Precedence of terminal (or list) - ie operand --- > my $HighestOperPrec = 14; > my $PrecTerminal = 15; # Precedence of terminal (or list) - ie operand 61,65c61,64 < '(' => [17, 17], < 'var' => [16, 16], < 'const' => [16, 16], < 'func' => [16, 16], < '**'=> [15, 15], --- > '(' => [16, 16], > 'var' => [15, 15], > 'const' => [15, 15], > 'func' => [15, 15], 170c169 < --- > 180c179 < elsif($expr =~ s@^(:=|>=|<=|==|<>|!=|&&|\|\||lt|gt|le|ge|eq|ne|\ *{2}|[-./*%+,<>\?:\(\);])@@) { --- > elsif($expr =~ s@^(:=|>=|<=|==|<>|!=|&&|\|\||lt|gt|le|ge|eq|ne|[ -./*%+,<>\?:\(\);])@@) { 480d478 < return $left ** $right if($oper eq '**');