#!/usr/bin/perl do { print "CALC> "; printf "%f\n", eval( Filter(<>) ); } until 0; sub Filter { my $exp = shift; ( $exp =~ /^\s*exit/ ) and return $exp; ( $exp =~ /^\s*(\w+)/ ) and return 'print STDERR "$1 denied\n"'; return $exp; }