#!/usr/bin/perl use 5.010_000; # re features use warnings; use strict; our @stack; our $result; my %unary_ops = ( chs => sub { $_[0] = -$_[0] }, abs => sub { $_[0] = abs $_[0] }, sqr => sub { $_[0] *= $_[0] }, sqrt => sub { $_[0] = sqrt $_[0] }, sin => sub { $_[0] = sin $_[0] }, cos => sub { $_[0] = cos $_[0] }, tan => sub { $_[0] = sin $_[0] / cos $_[0] }, ); my %binary_ops = ( '+' => sub { $_[0] += $_[1] }, '-' => sub { $_[0] -= $_[1] }, '/' => sub { $_[0] /= $_[1] }, '*' => sub { $_[0] *= $_[1] }, '^' => sub { $_[0]**= $_[1] }, ); my $RPN = qr{ ... }; my %input = ( ... ); foreach my $line ( keys %input ) { local $result; my ($expression) = $line =~ /($RPN)/; ... }