http://www.perlmonks.org?node_id=38942

This code is neither robust nor efficient nor general. But it's short and fun. Making it any of those things is not difficult, but it won't be do-able in 56 chars.

It doesn't deal with escaped or quoted parens -- i.e. they are treated like any other. It doesn't deal with nulls in the input very well, to make it do that would cost 3 extra chars. It doesn't let you know where you're unbalanced, but simply prints `1' if the input is balanced and prints nothing if it's not. Oh, and it requires 5.6.0 or better.

Give it a filename to check for balancing on the command line, or run it as shown below exactly and give it text to check on standard input.

-dlc

perl -n0e'$r=qr/(?>[^()]*)|\((??{$r})+\)/;print/^$r*$/'

Replies are listed 'Best First'.
40 characters, works even in Perl4
by I0 (Priest) on Dec 18, 2000 at 11:16 UTC
    perl -p0e 'tr/()//cd;eval{/$_/};$_=!$@'
      perl -p0e'y/()//cd;eval{/$_/};$_=!$@'