my $r = '3 + 5 * 2 - 3 * 4'; sub summe { my ($left, $right) = @_; my $left_num = evaluate($left); my $right_num = evaluate($right); return $left_num + $right_num; } sub differenz { my ($left, $right) = @_; my $left_num = evaluate($left); my $right_num = evaluate($right); return $left_num - $right_num; } sub produkt { my ($left, $right) = @_; my $left_num = evaluate($left); my $right_num = evaluate($right); return $left_num * $right_num; } sub quotient { my ($left, $right) = @_; my $left_num = evaluate($left); my $right_num = evaluate($right); return $left_num / $right_num; } sub evaluate { my $str = shift; $str =~ s/^\s*(.*?)\s*$/$1/; say $str; if ($str =~ /^\d+$/) { return $str; } my ($left, $typ, $right); ($left, $typ, $right) = split(/([\-\+])/, $str, 2); if (not defined $typ) { ($left, $typ, $right) = split(/([\*\/])/, $str, 2); } if (defined $typ) { if ($typ eq '+') { return summe($left, $right); } elsif ($typ eq '-') { return differenz($left, $right); } elsif ($typ eq '*') { return produkt($left, $right); } elsif ($typ eq '/') { return quotient($left, $right); } } else { die '?????????'; } } say "Ergebnis: ".evaluate($r);