use Text::Balanced qw(extract_bracketed); my $string = "Param1(x,y,z), Param2(1,2,3), Param3(a,b,c)"; print "Original string: ", $string, "\n"; my ($ext,$rem,$pre) = extract_bracketed($string, '()', '[^(]*'); print "extracted: $ext\n"; print "remainder: $rem\n"; print "prefix: $pre\n";