package Register; use strict; sub new { my $class = shift; my $self = {_register => 0 }; bless $self, $class; } sub set { my $self = shift; $self->{_register} = shift; } sub add { my $self = shift; $self->{_register} += shift; } sub multiply { my $self = shift; $self->{_register} *= shift; } sub value { my $self = shift; return $self->{_register}; } package main; my $r = new Register; my $ops = { set => 'set', add => 'add', mul => 'multiply', }; while(){ s/^\s+//; s/\s+$//; my ($operation,$param) = split; my $sub = $ops->{$operation}; $r->$sub($param); print $r->value,"\n"; } __DATA__ set 5 add 2 mul 2