diff --git a/rpn b/rpn index 268cc8f..d366bfd 100755 --- a/rpn +++ b/rpn @@ -3,14 +3,16 @@ use warnings; use strict; use Term::ANSIColor; use Math::Trig ':pi'; +use Scalar::Util qw(looks_like_number); my @stack; my $input_color = 'red'; my $stack_color = 'blue'; +my $format; print color $input_color; while (<>) { for (split) { - if (m{^[-+*/%]|\*\*$}) { + if (m{^([-+*/%]|\*\*)$}) { my $y = pop @stack; my $x = pop @stack; my $z = eval "$x $_ $y"; @@ -41,13 +43,20 @@ while (<>) { } elsif (m{^ld$}) { my $x = pop @stack; push @stack, log($x) / log(2); + } elsif (m{^format$}) { + $format = pop @stack; } else { push @stack, $_; } } for (@stack) { print color $stack_color; - print "$_\n"; + if ($format && looks_like_number($_)) { + printf($format, $_); + print "\n"; + } else { + print "$_\n"; + } } print color $input_color; }