$next_x->();
$next_y->();
next if $x->{E} eq $y->{E};
+ next if $x->{E} eq 'sprintf' and $y->{E} eq 'f_';
+ next if $x->{E} eq 'die' and $y->{E} eq 'confess';
if ($y->{E} eq '+'
and @ys >= 3
and $ys[0]{E} eq '('
my ($lit, $what) = @_;
my $xl = substr($xs, 0, length($lit));
if ($xl ne $lit) {
- debug $ichunkstart, "not exactly x: ..\"$xs\"";
- debug $ichunkstart, "not exactly y: $lit";
+ debug $ichunkstart, "not exactly x: \"..$xs\"";
+ debug $ichunkstart, "not exactly y: $lit";
my $next = @ys ? $ys[0]{P} : '(end)';
die "string contents mismatch near $what before $next\n";
}
elsif ($& ne '%s') { die "unhandled %-subst $&\n"; }
$next_y->();
die "expected comma, got $y->{P}\n" unless $y->{E} eq ',';
+ if (!length $fmt and
+ !length $xs and
+ @xs and
+ $xs[0]{E} eq '.') {
+ # X has "<earlier>" . <something>
+ # Y has "<earlier>%s" [other args] , <something>
+ $next_x->(); # eat the '.'
+ next;
+ }
if ($xs =~ m{^\@}) {
$next_y->();
die "\@... => not string" unless is_string($y);