sub is_balanced {
my $string = shift;
eval("qw($string)");
return 0 if $@;
return 1;
}
####
my $balanced = "(1 + 2 * (3 + (5/4) + 8) + 6)";
my $unbalanced1 = "(((1 + 2 * (3 + (5/4) + 8) + 6))";
my $unbalanced2 = "(((1 + 2 * (3 + (5/4) + 8) + 6))))";
printf("Is $balanced balanced? %s\n", balanced_parens($balanced) ? "yes" : "no");
printf("Is $unbalanced1 balanced? %s\n", balanced_parens($unbalanced1) ? "yes" : "no");
printf("Is $unbalanced2 balanced? %s\n", balanced_parens($unbalanced2) ? "yes" : "no");
####
Is (1 + 2 * (3 + (5/4) + 8) + 6) balanced? yes
Is (((1 + 2 * (3 + (5/4) + 8) + 6)) balanced? no
Is (((1 + 2 * (3 + (5/4) + 8) + 6)))) balanced? no