#!/usr/bin/perl use strict; use warnings; my $ans; my @m = (0,0,0,0,0,0,0,0,0,0); sub rechne { my $result = eval shift; defined($result) ? $ans = $result : 'Syntaxfehler!'; } sub fac { my $result = 1; foreach (2..$_[0]) { $result *= $_; } return $result; } sub ceil { if ($_[0] >= 0) { (int($_[0]) - $_[0]) ? (int($_[0]) + 1) : $_[0]; } else { -floor(-$_[0]); } } sub floor { if ($_[0] >= 0) { int($_[0]); } else { -ceil(-$_[0]); } } sub round { sign($_[0]) * floor(abs($_[0]) + 0.5) #Bei -2.5 wird auf -3 abgerundet und bei 2.5 auf 3 aufgerundet } sub sign { $_[0] <=> 0 } sub minmax { my $mode = shift; my $max = shift; foreach (@_) { if ($_ * $mode > $max * $mode) {$max = $_} } return $max; } sub max { minmax(1, @_); # (sort {$a <=> $b} @_)[-1]; } sub min { minmax(-1, @_); } if (@ARGV) { print "= ", rechne("@ARGV"), "\n"; } else { my $zeile; do { print "> "; $zeile = ; chomp($zeile); $zeile =~ s/ans/\$ans/g; $zeile =~ s/m(\d)/\$m\[$1\]/g; print "= ", rechne($zeile),"\n" if ($zeile); } while ($zeile); }