sub tokens { my @tokens = split m{ ( \*\* | := # ** or := operator | [-+*/^()=] # some other operator | [A-Za-z]\w+ # Identifier | \d*\.\d+(?:[Ee]\d+)? # Decimal number | \d+ # Integer ) }, shift(); return grep /\S/, @tokens; }