( a ( a ( a ( a ( aa ) a ) a ) a ) a ) #### #! perl -slw use strict; sub recurse { print ">> '${ $_[ 0 ] }'"; if( length ${ $_[ 0 ] } ) { recurse( \ substr( ${ $_[ 0 ] }, 1, -1 ) ); ${ $_[ 0 ] } = " ( ${ $_[ 0 ] } ) "; } print "<< '${ $_[ 0 ] }'"; return; } my $str = 'aaaaaaaaaa'; recurse \$str; print $str; __END__ P:\test>junk >> 'aaaaaaaaaa' >> 'aaaaaaaa' >> 'aaaaaa' >> 'aaaa' >> 'aa' >> '' << '' << ' ( aa ) ' << ' ( aaaa ) ' << ' ( aaaaaa ) ' << ' ( aaaaa' << ' ( a ( aaaaaaaa ) a ) ' ( a ( aaaaaaaa ) a )