diff options
-rw-r--r-- | pod/perldelta.pod | 7 | ||||
-rw-r--r-- | pod/perldiag.pod | 7 | ||||
-rw-r--r-- | pp.c | 3 | ||||
-rw-r--r-- | pp_hot.c | 2 |
4 files changed, 19 insertions, 0 deletions
diff --git a/pod/perldelta.pod b/pod/perldelta.pod index d3fbae5b87..621368520b 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -492,6 +492,13 @@ only with arrays that have a hash reference at index 0. (F) The "goto subroutine" call can't be used to jump out of an eval "string". (You can use it to jump out of an eval {BLOCK}, but you probably don't want to.) +=item Can't localize pseudo-hash element + +(F) You said something like C<local $ar-E<gt>{'key'}>, where $ar is +a reference to a pseudo-hash. That hasn't been implemented yet, but +you can get a similar effect by localizing the corresponding array +element directly -- C<local $ar-E<gt>[$ar-E<gt>[0]{'key'}]>. + =item Can't use %%! because Errno.pm is not available (F) The first time the %! hash is used, perl automatically loads the diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 43226e076d..5fdeb70ab8 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -697,6 +697,13 @@ lexical variable using "my". This is not allowed. If you want to localize a package variable of the same name, qualify it with the package name. +=item Can't localize pseudo-hash element + +(F) You said something like C<local $ar-E<gt>{'key'}>, where $ar is +a reference to a pseudo-hash. That hasn't been implemented yet, but +you can get a similar effect by localizing the corresponding array +element directly -- C<local $ar-E<gt>[$ar-E<gt>[0]{'key'}]>. + =item Can't locate auto/%s.al in @INC (F) A function (or method) was called in a package which allows autoload, @@ -2414,6 +2414,9 @@ PP(pp_hslice) register I32 lval = PL_op->op_flags & OPf_MOD; I32 realhv = (SvTYPE(hv) == SVt_PVHV); + if (!realhv && PL_op->op_private & OPpLVAL_INTRO) + DIE("Can't localize pseudo-hash element"); + if (realhv || SvTYPE(hv) == SVt_PVAV) { while (++MARK <= SP) { SV *keysv = *MARK; @@ -1337,6 +1337,8 @@ PP(pp_helem) svp = he ? &HeVAL(he) : 0; } else if (SvTYPE(hv) == SVt_PVAV) { + if (PL_op->op_private & OPpLVAL_INTRO) + DIE("Can't localize pseudo-hash element"); svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, 0); } else { |