- unless (s{^(.*?)$esc}{}) { o $_; last; }
- o $1;
- if (s{^\\$esc}{}) { o "$$esclitr" }
- elsif (s{^\\\$}{}) { o '$' }
- elsif (s{^$esc}{}) { o "$$esclitr$$esclitr" }
- elsif (m{^(?=$caps_re)}) { o $var_prefix }
- elsif (s{^\$([A-Za-z]\w+)}{}) { o "\$(${var_prefix}$1)" }
- elsif (s{^([~^]?)(?=$lc_re)}{}) { o $pfxmap{$1} }
- elsif (s{^_}{}) { o $var_prefix }
- elsif (s{^=}{}) { o $var_prefix_name }
- elsif (s{^([~^]?)/}{}) { o $pfxmap{$1} }
- elsif (s{^\.}{}) { o $dir_name }
- elsif (s{^([~^])\.}{}) { o $srcdirmap{$1} }
- elsif (s{^([~^]?)(?=[ \t])}{}) {
- my $prefix = $pfxmap{$1} // die;
+ err 'cannot $-double &-processed RHS of directive'
+ if $ddbl && defined $buffering_output;
+ unless ($nest[0][0] eq 'eval'
+ ? s{^(.*?)($esc|[{}])}{}
+ : s{^(.*?)($esc)}{}) { od $_; last; }
+ od $1;
+ if ($2 eq '{') {
+ $ddbl++;
+ next;
+ } elsif ($2 eq '}') {
+ next if --$ddbl;
+ $pop_nest->('eval');
+ od '}}';
+ next;
+ }
+ if (s{^\\$esc}{}) { od "$$esclitr" }
+ elsif (s{^\\\$}{}) { oud '$' }
+ elsif (s{^\\\s+$}{}) { }
+ elsif (s{^$esc}{}) { od "$$esclitr$$esclitr" }
+ elsif (m{^(?=$caps_re)}) { od $var_prefix }
+ elsif (s{^\$([A-Za-z]\w+)}{}) { od "\$(${var_prefix}$1)" }
+ elsif (s{^([~^]?)(?=$lc_re)}{}) { od $pfxmap{$1} }
+ elsif (s{^_}{}) { od $var_prefix }
+ elsif (s{^=}{}) { od $var_prefix_name }
+ elsif (s{^([~^]?)/}{}) { od $pfxmap{$1} }
+ elsif (s{^\.}{}) { od $dir_name }
+ elsif (s{^([~^])\.}{}) { od $srcdirmap{$1} }
+ elsif (s{^\$\-}{}) { $ddbl=undef; }
+ elsif (s{^\$\+}{}) { $ddbl=1; }
+ elsif (s{^\$\(}{}) { ddbl_only($&); oud "\$("; }
+ elsif (s{^\$(\d+)}{}) { ddbl_only($&); oud "\$($1)"; }
+ elsif (s{^\$\{}{}) {
+ err 'macro invocation cannot be re-$-doubled' if $ddbl;
+ od '${eval ${call ';
+ $push_nest->('eval',1, '&${...}');
+ } elsif (s{^([~^]?)(?=[ \t])}{}) {
+ my $prefix = $pfxmap{$1} // die "internal error ($1?)";