--- Data-Alias-1.18-orig/Alias.xs 2013-09-21 08:02:59.000000000 -0700 +++ Data-Alias-1.18-hsUEy_/Alias.xs 2014-09-10 08:15:07.000000000 -0700 @@ -1800,6 +1800,7 @@ STATIC void da_peep2(pTHX_ OP *o) { useful = o->op_private & OPpUSEFUL; op_null(o); o->op_ppaddr = PL_ppaddr[OP_NULL]; + cLISTOPo->op_last = cUNOPx(cLISTOPo->op_first)->op_first; k = o = cLISTOPo->op_first; while ((sib = k->op_sibling)) k = sib; @@ -1900,8 +1901,9 @@ STATIC OP *da_ck_rv2cv(pTHX_ OP *o) { if ((PL_nexttype[PL_nexttoke++] = yylex()) == '{') { PL_nexttype[PL_nexttoke++] = DO; sv_setpv((SV *) cv, "$"); - if (PERL_COMBI_VERSION >= 5011002 && - *PL_bufptr == '(') { + if ((PERL_COMBI_VERSION >= 5011002 && + *PL_bufptr == '(') + || PERL_COMBI_VERSION >= 5021004) { /* * A paren here triggers special lexer * behaviour for a parenthesised argument @@ -1910,6 +1912,10 @@ STATIC OP *da_ck_rv2cv(pTHX_ OP *o) { * Suppress it by injecting a semicolon, * which is otherwise a no-op coming just * after the opening brace of a block. + * Also inject the semicolon for 5.21.4 + * and higher, because our setting of + * PL_expect is undone, as PL_lex_expect + * is not used any more. */ Move(PL_bufptr, PL_bufptr+1, PL_bufend+1-PL_bufptr, char); @@ -1920,7 +1926,9 @@ STATIC OP *da_ck_rv2cv(pTHX_ OP *o) { } if(PL_lex_state != LEX_KNOWNEXT) { PL_lex_defer = PL_lex_state; +#if PERL_COMBI_VERSION < 5021004 PL_lex_expect = PL_expect; +#endif PL_lex_state = LEX_KNOWNEXT; } PL_yylval = yylval;