while s/[(][^()][)]//; is actually a syntax error. Also, that pattern only matches parenthesis with exactly one character between them.
Here's some working code for arbitrary parenthesized strings:
sub balanced { $_ = shift; while (s/[(][^()]*[)]//) {}; return 0 if /[()]/; return 1; }
Of course a real programmer uses a PDA to balance parenthesis. (;
sub balanced { my $string = shift; my $stack = 0; for my $index (0..length($string) - 1) { my $char = substr($string, $index, 1); if ($char eq '(') { $stack++; } elsif ($char eq ')') { $stack--; }
# Update: Ha! Thanks, BlaisePascal.
# A PDA that happily pops an empty
# stack isn't very useful. :)return 0 if $stack < 0; } return $stack ? 0 : 1; }
-Matt
In reply to RE: Re: getting a return code from a looping regular expression
by DrManhattan
in thread getting a return code from a looping regular expression
by princepawn
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |