NAME
rpn - optex module for Reverse Polish Notation calculation
SYNOPSIS
optex -Mrpn command ...
DESCRIPTION
rpn is a module for the optex command that detects arguments that look like Reverse Polish Notation (RPN) expressions and replaces them with their calculated results.
By default, all arguments are processed automatically when the module is loaded.
MODULE OPTIONS
Module options can be set via -Mrpn::config(...) or --option before --.
- --auto, --no-auto
-
Enable or disable automatic processing of all arguments. Default is enabled. Use
--no-autoto disable and process only arguments specified by--rpn. - -p name_or_regex, --pattern name_or_regex
-
Specify a pattern to match RPN expressions. The value can be either a preset name (word characters only, prefix match supported) or a custom regex pattern.
When
--patternis specified,--autois ignored.Preset patterns:
rpn-
Matches
rpn(...)and extracts the content inside parentheses. equal-
Matches
...=at the end and extracts the expression before=.
Custom patterns:
When the value contains non-word characters, it is treated as a regex pattern. The pattern must contain a capture group
(...)that captures the RPN expression. The entire matched portion is replaced with the calculated result.Examples:
# Use preset pattern 'rpn' (or -pr for short) optex -Mrpn -pr -- echo '3600*5' '=' rpn(3600,5*) # outputs: 3600*5 = 18000 # Use preset pattern 'equal' (or -pe for short) optex -Mrpn -pe -- echo '3600*5' '=' 3600,5*= # outputs: 3600*5 = 18000 # Use custom regex pattern optex -Mrpn --pattern 'calc\[(.*)\]' -- echo calc[3600,5*] # outputs: 18000 - --quiet, --no-quiet
-
Suppress Math::RPN warning messages. Default is enabled. Use
--no-quietto see warnings for invalid expressions. - --verbose
-
Print diagnostic messages.
COMMAND OPTIONS
These options are available after --.
- --rpn expression
-
Convert a single RPN expression.
optex -Mrpn --no-auto -- printf '%s = %d\n' 3600,5* --rpn 3600,5* # outputs: 3600,5* = 18000
EXPRESSIONS
An RPN expression requires at least two terms separated by commas or colons. A single term like RAND will not be converted, but RAND,0+ will produce a random number.
OPERATORS
The following operators are supported (case-insensitive):
- Arithmetic
-
+(ADD),-(SUB),*(MUL),/(DIV),%(MOD),++(INCR),--(DECR),POW,SQRT - Trigonometric
-
SIN,COS,TAN - Logarithmic
-
LOG,EXP - Numeric
-
ABS,INT - Bitwise/Logical
-
&(AND),|(OR),!(NOT),XOR,~ - Comparison
-
<(LT),<=(LE),=/==(EQ),>(GT),>=(GE),!=(NE) - Conditional
-
IF - Stack
-
DUP,EXCH,POP - Other
-
MIN,MAX,TIME,RAND,LRAND
See Math::RPN for detailed descriptions of these operators.
EXAMPLES
Convert 5 hours to seconds (3600 * 5 = 18000):
$ optex -Mrpn echo 3600,5*
18000
Prevent macOS from sleeping for 5 hours:
$ optex -Mrpn caffeinate -d -t 3600,5*
Process multiple expressions:
$ optex -Mrpn echo 1,2+ 10,3*
3 30
Generate a random number:
$ optex -Mrpn echo RAND,0+
0.316809834520431
INSTALLATION
CPANMINUS
cpanm App::optex::rpn
SEE ALSO
App::optex, https://github.com/kaz-utashiro/optex
App::optex::rpn, https://github.com/kaz-utashiro/optex-rpn
https://qiita.com/kaz-utashiro/items/2df8c7fbd2fcb880cee6
AUTHOR
Kazumasa Utashiro
LICENSE
Copyright 2021-2025 Kazumasa Utashiro.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.