This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Croak for \local %{\%foo}
authorFather Chrysostomos <sprout@cpan.org>
Sun, 26 Aug 2012 18:10:18 +0000 (11:10 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 26 Aug 2012 20:16:54 +0000 (13:16 -0700)
See the previous commit.

When I moved the check for local %$ref earlier, I didn’t move it
early enough.

pp_hot.c
t/lib/croak/pp_hot

index 15ccba7..4f4e8cf 100644 (file)
--- 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)) {
index 6b59ba7..bc00a48 100644 (file)
@@ -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;