From 3da9985538c5eae2dd2de1309b320bc77f757687 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Sun, 26 Aug 2012 11:10:18 -0700 Subject: [PATCH] Croak for \local %{\%foo} MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit See the previous commit. When I moved the check for local %$ref earlier, I didn’t move it early enough. --- pp_hot.c | 6 +++--- t/lib/croak/pp_hot | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pp_hot.c b/pp_hot.c index 15ccba7..4f4e8cf 100644 --- a/pp_hot.c +++ b/pp_hot.c @@ -777,13 +777,13 @@ PP(pp_rv2av) if (SvTYPE(sv) != type) /* diag_listed_as: Not an ARRAY reference */ DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash); + else if (PL_op->op_flags & OPf_MOD + && PL_op->op_private & OPpLVAL_INTRO) + Perl_croak(aTHX_ "%s", PL_no_localize_ref); if (PL_op->op_flags & OPf_REF) { SETs(sv); RETURN; } - else if (PL_op->op_flags & OPf_MOD - && PL_op->op_private & OPpLVAL_INTRO) - Perl_croak(aTHX_ "%s", PL_no_localize_ref); else if (PL_op->op_private & OPpMAYBE_LVSUB) { const I32 flags = is_lvalue_sub(); if (flags && !(flags & OPpENTERSUB_INARGS)) { diff --git a/t/lib/croak/pp_hot b/t/lib/croak/pp_hot index 6b59ba7..bc00a48 100644 --- a/t/lib/croak/pp_hot +++ b/t/lib/croak/pp_hot @@ -23,6 +23,16 @@ Can't localize through a reference at - line 1. EXPECT Can't localize through a reference at - line 1. ######## +# NAME \local %$ref + \local %{\%hash} +EXPECT +Can't localize through a reference at - line 1. +######## +# NAME \local @$ref + \local @{\@hash} +EXPECT +Can't localize through a reference at - line 1. +######## # NAME calling undef sub belonging to undef GV my $foosub = \&foo; undef *foo; -- 1.8.3.1