Hmmm... This is the best I could do, but it's a bit icky for Anonymonk's OPed application:
>perl -wMstrict -le
"sub rx (&@) {
return map { local $_ = $_; ()= $_[0]->(); $_; } @_[1..$#_];
}
;;
my $s = 'a b c d';
print rx { s/ /_/g } $s;
;;
my @ra = ('p q r', 'x y z z y');
print rx { s/ /_/g } @ra;
;;
my $x =
q{Here are [[a [[ variable]] number [[of ]words]] in brackets};
print qq{'$x'};
;;
$x =~ s( \[\[ (.*?) \]\] )( (rx {s/ /_/g} $1)[0] )xmsge;
print qq{'$x'};
"
a_b_c_d
p_q_rx_y_z_z_y
'Here are [[a [[ variable]] number [[of ]words]] in brackets'
'Here are a_[[_variable number of_]words in brackets'
Bottom line: s///r is a lot nicer. Thanks again to whoever thought of that one.