#! perl -slw use strict; while() { my $count=0; chomp; print; $count += $1 eq '(' ? +1 : -1 while m[([()])]g ; s[(^.*?)\(] [$1] while $count-- > 0; s[(.*)\)(.*?$)][$1$2] while ++$count < 0; print; } __DATA__ test (test) test (test (test (test)) (test (test) (() (()) (((())))) ( () (()) ( ( () ) ) )) (( () (()) ( ( () ) ) ) ((( test test ))) (((test) (test)))