- 'swap' => [1, sub {($val[0], $stack[0]) = ($stack[0], $val[0])}], # swap x<->y
-
- '=' => [1, sub {$var{a} = $val[0]}], # copy
- '>' => [1, sub {$var{a} = $val[0]; $val[0] = shift @stack}], # assign
-
- '+' => [2, sub {$val[0] += shift @stack}], # addition
- '-' => [2, sub {$val[0] = shift(@stack) - $val[0]}], # substraction
- '*' => [2, sub {$val[0] *= shift @stack}], # multiplication
- '/' => [2, sub {$val[0] = shift(@stack) / $val[0]}], # division
- 'mod' => [2, sub {$val[0] = shift(@stack) % $val[0]}], # modulo
-
- 'sqrt' => [1, sub {$val[0] = sqrt $val[0]}], # square root
- 'sq' => [1, sub {$val[0] *= $val[0]}], # squared
- '^' => [2, sub {$val[0] = shift(@stack) ** $val[0]}], # exponentiation
- 'xroot'=> [2, sub {$val[0] = shift(@stack) ** (1/$val[0])}], # x-root of y
-
- 'log' => [1, sub {$val[0] = log($val[0]) / log(10)}], # logarithm
- 'alog' => [1, sub {$val[0] = 10 ** $val[0]}], # 10^x
- 'ln' => [1, sub {$val[0] = log $val[0]}], # natural logaritm
- 'lnp1' => [1, sub {$val[0] = log($val[0]+1)}], # ln(x+1)
- 'exp' => [1, sub {$val[0] = exp($val[0])}], # e^x
- 'expm' => [1, sub {$val[0] = exp($val[0])-1}], # exp(x)-1
-
- 'sin' => [1, sub {$val[0] = sin $val[0]}], # sine
- 'asin' => [1, sub {$val[0] = atan2($val[0], sqrt(1 - $val[0]*$val[0]))}], # inverse sine
- 'cos' => [1, sub {$val[0] = cos $val[0]}], # cosine
- 'acos' => [1, sub {$val[0] = atan2(sqrt(1 - $val[0]*$val[0]), $val[0])}], # inverse cosine
- 'tan' => [1, sub {$val[0] = sin($val[0]) / cos($val[0])}], # tangent
+ 'swap' => [1, sub {@stack[0, 1] = @stack[1, 0]}], # swap x<->y
+
+ '=' => [1, sub {$var{a} = $stack[0]}], # copy
+ '>' => [1, sub {$var{a} = shift @stack}], # assign
+
+ '+' => [2, sub {$stack[1] += shift @stack}], # addition
+ '-' => [2, sub {$stack[1] -= shift @stack}], # substraction
+ '*' => [2, sub {$stack[1] *= shift @stack}], # multiplication
+ '/' => [2, sub {$stack[1] /= shift @stack}], # division
+ 'mod' => [2, sub {$stack[1] %= shift @stack}], # modulo
+
+ 'sqrt' => [1, sub {$stack[0] = sqrt $stack[0]}], # square root
+ 'sq' => [1, sub {$stack[0] *= $stack[0]}], # squared
+ '^' => [2, sub {$stack[1] **= shift @stack}], # exponentiation
+ 'xroot'=> [2, sub {$stack[1] **= 1 / shift @stack}], # x-root of y
+
+ 'log' => [1, sub {$stack[0] = log($stack[0]) / log(10)}], # logarithm
+ 'alog' => [1, sub {$stack[0] = 10 ** $stack[0]}], # 10^x
+ 'ln' => [1, sub {$stack[0] = log $stack[0]}], # natural logaritm
+ 'lnp1' => [1, sub {$stack[0] = log($stack[0]+1)}], # ln(x+1)
+ 'exp' => [1, sub {$stack[0] = exp($stack[0])}], # e^x
+ 'expm' => [1, sub {$stack[0] = exp($stack[0])-1}], # exp(x)-1
+
+ 'sin' => [1, sub {$stack[0] = sin $stack[0]}], # sine
+ 'asin' => [1, sub {$stack[0] = atan2($stack[0], sqrt(1 - $stack[0]*$stack[0]))}], # inverse sine
+ 'cos' => [1, sub {$stack[0] = cos $stack[0]}], # cosine
+ 'acos' => [1, sub {$stack[0] = atan2(sqrt(1 - $stack[0]*$stack[0]), $stack[0])}], # inverse cosine
+ 'tan' => [1, sub {$stack[0] = sin($stack[0]) / cos($stack[0])}], # tangent