print DEBUG "L $fn:$lno:",join('',@oplist),
":`$l' e\`$expr' s\`$substr'\n";
if (@oplist & 1) { # scanning perl
- if ($l =~ m/(.)\@\@/m || $l =~ m/^()\@\@/m) {
+ if ($l =~ m/^()\@\@/ || $l =~ m/([^\000])\@\@/) {
($to,$op,$esc,$l) = ($`,$1,$&,$');
add_perl($to);
- if ($op =~ m/[ 0-9a-zA-Z_\;\)\}?]/ || $op eq '') {
+ if ($op =~ m/[ \t\n0-9a-zA-Z_\;\)\}?]/ || $op eq '') {
$top= pop @oplist;
if (!@oplist) {
# And evaluate.
if ($l =~ m/\@\@(.|\n)/) {
($to,$op,$esc,$l) = ($`,$1,$&,$');
add_text($to);
- if ($op =~ m/[-< \$?]/) {
- $substr.= $esc if @oplist;
+ if ($op =~ m/[-< \$?\n]/) {
+ if (!@oplist) {
+ add_perl($op) if $op =~ m/[\$]/;
+ } else {
+ $substr.= $esc;
+ }
push @oplist, $op;
- add_perl($op) if $op =~ m/[\$]/;
} elsif ($op =~ m/[\)\}\;\:]/) {
err("unmatched closing \@\@$op") unless @oplist;
$want= pop @oplist;