( .* \n )
( (?: (?! $d) .* \n )* )
$d \n
- }{ $1 }x or die "missing end of here doc $d\n";
+ }{ $1 }xe or die "missing end of here doc $d\n";
$o[$#o]{V} = $2;
} elsif (s{^ (["'])( (?: [^\\'"]
| \\ [^"']
and $ys[0]{E} eq '('
and is_trans($ys[1])) {
$next_y->(); # (
- $next_y->(); # __ f_
+ $next_y->(); # __ f_ i_
+ @y_expect_suffix = ')';
+ } elsif ($y->{E} eq '('
+ and @ys > 2
+ and is_trans($ys[0])
+ and @analysed_y
+ and (grep { $_ eq $analysed_y[-1] } (qw( => [ { ? : . ),
+ '(', ',') )) {
+ $next_y->(); # __ f_ i_
@y_expect_suffix = ')';
}
my $string_changed;
if (is_trans($y)) {
$next_y->();
die "__ on non-string $y->{P}\n" unless is_string($y);
- die "__ on was non-string $y->{P}\n" unless is_string($x);
+ die "__ on was non-string $x->{P}\n" unless is_string($x);
if ($y->{Q} ne "'") {
die "var subst in new string\n"
if $y->{V} =~ m{(?<!\\) [\$\@]};
if ($fmt !~ m{\%[^\%]}) {
$exactly->($fmt, '(tail)');
$fmt = '';
+ die "text deleted from end of string\n" if length $xs;
last;
}
$exactly->($`, '(literal)');