sub tokens { my @tokens = split m{(\*\*|:=|[-+*/^()=]|[A-Za-z]\w+|\d*\.\d+(?:[Ee]\d+)?|\d+)|\s+}, shift(); return grep /\S/, @tokens; }