逆ポーランド記法。もしくは3年前の自分との勝負
30分プログラム、その800。
3年前にやったお題(2007-04-16 - みずぴー日記)を再び解いてみた。
多少、スマートになってるようで、ちょっと安心した。
使い方
$ perl rpn.pl 3 2 1 + \* 9
ソースコード
#! /usr/bin/perl # -*- mode:perl; coding:utf-8 -*- use strict; use warnings; use Data::Dumper; { package stack; sub new { my $class = shift; return bless [],$class; } sub push{ my ($self,$v) = @_; push @$self,$v; } sub pop { my ($self) = @_; pop @$self; } } sub rpm(@){ my $stack = stack->new; foreach (@_) { if(m![-+*/]!) { my $a = $stack->pop; my $b = $stack->pop; $stack->push(eval "$a $_ $b"); }elsif (/\d+/) { $stack->push($_); } } $stack->pop } print rpm(@ARGV),"\n";