my ($skip, $re, $expr, $term); $skip = qr! \s* !x; $re = qr! ^ (??{ $expr }) (??{ $skip }) \z !x; $expr = qr! (??{ $term }) (?: (??{ $skip }) [-+*/] (??{ $term }) )* !x;