# Assuming expression is in $string my $num = '-?(\.\d+|\d+(\.\d+)?)'; my $ops = '[-+*/]'; if ($string =~ /^(${num}${ops})+${num})$/) { # It's a simple math calculation } else { # It's something else }