Merge branch 'master' of ssh://hrunkner.hjp.at//home/hjp/wrk/rpn
Conflicts: rpn resolved trivial conflicts.
This commit is contained in:
commit
0f0027d73c
13
rpn
13
rpn
|
@ -3,14 +3,16 @@ use warnings;
|
||||||
use strict;
|
use strict;
|
||||||
use Term::ANSIColor;
|
use Term::ANSIColor;
|
||||||
use Math::Trig ':pi';
|
use Math::Trig ':pi';
|
||||||
|
use Scalar::Util qw(looks_like_number);
|
||||||
|
|
||||||
my @stack;
|
my @stack;
|
||||||
my $input_color = 'red';
|
my $input_color = 'red';
|
||||||
my $stack_color = 'blue';
|
my $stack_color = 'blue';
|
||||||
|
my $format;
|
||||||
print color $input_color;
|
print color $input_color;
|
||||||
while (<>) {
|
while (<>) {
|
||||||
for (split) {
|
for (split) {
|
||||||
if (m{^[-+*/]|\*\*$}) {
|
if (m{^([-+*/%]|\*\*)$}) {
|
||||||
my $y = pop @stack;
|
my $y = pop @stack;
|
||||||
my $x = pop @stack;
|
my $x = pop @stack;
|
||||||
my $z = eval "$x $_ $y";
|
my $z = eval "$x $_ $y";
|
||||||
|
@ -47,13 +49,20 @@ while (<>) {
|
||||||
} elsif (m{^0[0-7]+$}) {
|
} elsif (m{^0[0-7]+$}) {
|
||||||
no warnings 'portable';
|
no warnings 'portable';
|
||||||
push @stack, oct($_);
|
push @stack, oct($_);
|
||||||
|
} elsif (m{^format$}) {
|
||||||
|
$format = pop @stack;
|
||||||
} else {
|
} else {
|
||||||
push @stack, $_;
|
push @stack, $_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (@stack) {
|
for (@stack) {
|
||||||
print color $stack_color;
|
print color $stack_color;
|
||||||
print "$_\n";
|
if ($format && looks_like_number($_)) {
|
||||||
|
printf($format, $_);
|
||||||
|
print "\n";
|
||||||
|
} else {
|
||||||
|
print "$_\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
print color $input_color;
|
print color $input_color;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue