use Regexp::Common qw /balanced/; my $ttt = '$sub24835->($sub24839->( $sub24828->($sub24840->("( a1"),$sub24841->(" a1 ) ")), $sub24830->($sub24853->("( a2 "),$sub24854->(" a2 )")),$sub24828->($sub24840->("( a1"),$sub24841->(" a1 ) ")),$sub24842->($sub24843->("0"),$sub24830->($sub24853->("( a2 "),$sub24854->(" a2 )")),$sub24828->($sub24840->("( a1"),$sub24841->(" a1 ) "))),$sub24830->($sub24853->("( a2 "),$sub24854->(" a2 )")),$sub24828->($sub24840->("( a1"),$sub24841->(" a1 ) ")),$sub24832->($sub24855->("1"),$sub24856->($sub24857->("| a3"),$sub24859->("a3 |")),$sub24858->("a3")),$sub24849->($sub24850->("1"),$sub24830->($sub24853->("( a2 "),$sub24854->(" a2 )")),$sub24832->($sub24855->("1"),$sub24856->($sub24857->("| a3"),$sub24859->("a3 |")),$sub24858->("a3")))))'; my @ttt = $ttt =~ /(\$sub\d+->$RE{balanced}{-parens=>'()'}).*?\1/sg; print scalar @ttt, "\n"; print join("\n", @ttt);