#!/usr/bin/perl use strict; use warnings; my $operators = { '+' => sub { my $i=shift @_; $i += $_ for @_; return $i }, '-' => sub { my $i=shift @_; $i -= $_ for @_; return $i }, '*' => sub { my $i=shift @_; $i *= $_ for @_; return $i }, '/' => sub { my $i=shift @_; $i /= $_ for @_; return $i }, }; my $task = "/ 12 2 2"; print solve($task), "\n"; exit; sub solve { my $to_solve = shift @_ || die "solve(): no parameter\n"; my ($op, @vals) = split /\s+/, $to_solve; die "solve(): wrong operator or to less values" unless (exists $operators->{$op} && $#vals >= 1); return $operators->{$op}(@vals); }