summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen McCamant <smcc@mit.edu>1998-07-21 11:12:25 -0500
committerGurusamy Sarathy <gsar@cpan.org>1998-07-22 02:45:55 +0000
commit0ebe003824736fdbe73467ef153a40f1d6fc4b92 (patch)
treed03b8ba3f3108ffdc4bef2927b4e3ffc0fab0ae8
parent81009501838bbdb5cbd808a07c703b194ef32869 (diff)
downloadperl-0ebe003824736fdbe73467ef153a40f1d6fc4b92.tar.gz
applied patch, add new message to perldeta
Message-Id: <13749.910.83378.949909@alias-2.pr.mcs.net> Subject: [PATCH] Band-aid patch for local($avhv->{a}) p4raw-id: //depot/perl@1619
-rw-r--r--pod/perldelta.pod7
-rw-r--r--pod/perldiag.pod7
-rw-r--r--pp.c3
-rw-r--r--pp_hot.c2
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,
diff --git a/pp.c b/pp.c
index 702806d476..5e32613ce7 100644
--- a/pp.c
+++ b/pp.c
@@ -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;
diff --git a/pp_hot.c b/pp_hot.c
index 823da4446a..dd4f82b6bb 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -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 {