sub parse_expr { my($value, @stack); while(1) { $value = parse_value or die "Parse error"; my $op = parse_operator or last; $value = process(\@stack, $value, $op); # intermediate processing push @stack, { value => $value, op => $op }; # store for the next round } $value = process(\@stack, $value); # final processing return $value; }