pbot/modules/math.pl

49 lines
1.0 KiB
Perl
Raw Normal View History

2007-05-20 22:44:44 +02:00
#!/usr/bin/perl -w
# Quick and dirty by :pragma
my ($arguments, $response, $invalid);
2007-05-20 22:44:44 +02:00
my @valid_keywords = (
'sin', 'cos', 'tan', 'atan', 'exp', 'int', 'hex', 'oct', 'log', 'sqrt',
'floor', 'ceil', 'asin', 'acos', 'log10', 'sinh', 'cosh', 'tanh', 'abs',
2014-03-24 04:05:48 +01:00
'pi', 'deg2rad', 'rad2deg', 'atan2'
);
2007-05-20 22:44:44 +02:00
if ($#ARGV < 0)
{
print "Dumbass.\n";
exit 0;
2007-05-20 22:44:44 +02:00
}
$arguments = join(' ', @ARGV);
2007-05-20 22:44:44 +02:00
2014-03-24 04:05:48 +01:00
if($arguments =~ m/([\$`\|{}"'#@=])/) {
$invalid = $1;
} else {
2014-03-24 04:05:48 +01:00
while($arguments =~ /([a-zA-Z0-9]+)/g) {
my $keyword = $1;
2014-03-24 04:10:08 +01:00
next if $keyword =~ m/^[0-9]+$/;
$invalid = $keyword and last if not grep { /^$keyword$/ } @valid_keywords;
}
}
if($invalid) {
print "Illegal symbol '$invalid' in equation\n";
exit 1;
}
2014-03-24 04:05:48 +01:00
$response = eval("use POSIX qw/ceil floor/; use Math::Trig; use Math::Complex;" . $arguments);
if($@) {
my $error = $@;
$error =~ s/[\n\r]+//g;
2014-04-26 17:22:46 +02:00
$error =~ s/ at \(eval \d+\) line \d+.//;
$error =~ s/ at EOF$//;
2014-03-24 04:05:48 +01:00
$error =~ s/Died at .*//;
print $error;
exit 1;
2007-05-20 22:44:44 +02:00
}
print "$arguments = $response\n";