#!/usr/bin/perl -w use strict; my @strings = ( '(a(a(b)a)a)', # balanced '(a(a(b)a)a)a)', # too many right parens '(a(a(b)a\)a)a)', # balanced -- one right paren is escaped '(a(a\(a(a(b)a)a)', # unbalanced -- still have too many left parens '(a(a\(a(b)a)a)' ); # balanced -- one left paren is escaped foreach my $string ( @strings ) { my $balanced = balanced_delimiters( $string, "(", ")", "\\" ); print "Delimiters in $string are "; if ( $balanced ){ print "balanced.\n"; } else { print "not balanced.\n"; } } sub balanced_delimiters { # $escape is optional. If not supplied, no escape character will # be recognized. my $str = shift; my $left = quotemeta shift; my $right = quotemeta shift; my $escape = quotemeta shift; my $unescapedLeft = "(?