逆ポーランド記法。もしくは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";