If you only need to replace one capture, then using @LAST_MATCH_STARTand @LAST_MATCH_END(s use English; see perldoc perlvar) together with substrmay be a viable choice:
use English qw(-no_match_vars);
$your_string =~ m/aaa (bbb) ccc/;
substr $your_string, $LAST_MATCH_START[1], $LAST_MATCH_END[1] - $LAST_MATCH_START[1], "new content";