From: Gurusamy Sarathy Date: Sat, 8 May 1999 19:48:11 +0000 (+0000) Subject: allow AV/HV dereferences on pseudohashes ($ph->{foo}[1], etc.) X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=377b21bb1127ac5ca00091f9cc395d44f5adff24;p=p5sagit%2Fp5-mst-13.2.git allow AV/HV dereferences on pseudohashes ($ph->{foo}[1], etc.) p4raw-id: //depot/perl@3335 --- diff --git a/op.c b/op.c index 7e3beb2..6898731 100644 --- a/op.c +++ b/op.c @@ -5588,7 +5588,7 @@ peep(register OP *o) char *key; STRLEN keylen; - if (o->op_private & (OPpDEREF_HV|OPpDEREF_AV|OPpLVAL_INTRO) + if ((o->op_private & (OPpLVAL_INTRO)) || ((BINOP*)o)->op_last->op_type != OP_CONST) break; rop = (UNOP*)((BINOP*)o)->op_first; diff --git a/t/lib/fields.t b/t/lib/fields.t index 5aae345..6f3ea5bb 100755 --- a/t/lib/fields.t +++ b/t/lib/fields.t @@ -82,7 +82,7 @@ my %expect = ( 'Foo::Bar::Baz' => 'b1:1,b2:2,b3:3,foo:4,bar:5,baz:6', ); -print "1..", int(keys %expect)+3, "\n"; +print "1..", int(keys %expect)+5, "\n"; my $testno = 0; while (my($class, $exp) = each %expect) { no strict 'refs'; @@ -110,3 +110,17 @@ print "not " unless $@ && $@ =~ /^No such field "notthere"/; print "ok ", ++$testno, "\n"; #fields::_dump(); + +# check if +{ + package Foo; + use fields qw(foo bar); + sub new { bless [], $_[0]; } + + package main; + my Foo $a = Foo->new(); + $a->{foo} = ['a', 'ok ' . ++$testno, 'c']; + $a->{bar} = { A => 'ok ' . ++$testno }; + print $a->{foo}[1], "\n"; + print $a->{bar}->{A}, "\n"; +}