summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--op.c2
-rwxr-xr-xt/op/array.t13
2 files changed, 14 insertions, 1 deletions
diff --git a/op.c b/op.c
index 11cd640947..aa0b1e78ea 100644
--- a/op.c
+++ b/op.c
@@ -6818,7 +6818,7 @@ Perl_peep(pTHX_ register OP *o)
pop->op_next->op_type == OP_AELEM &&
!(pop->op_next->op_private &
(OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
- (i = SvIV(((SVOP*)pop)->op_sv) - PL_compiling.cop_arybase)
+ (i = SvIV(((SVOP*)pop)->op_sv) - PL_curcop->cop_arybase)
<= 255 &&
i >= 0)
{
diff --git a/t/op/array.t b/t/op/array.t
index d48b5fbfa0..122a49ec3c 100755
--- a/t/op/array.t
+++ b/t/op/array.t
@@ -234,3 +234,16 @@ sub foo { "a" }
@foo=(foo())[0,0];
$foo[1] eq "a" or print "not ";
print "ok 71\n";
+
+# $[ should have the same effect regardless of whether the aelem
+# op is optimized to aelemfast.
+
+sub tary {
+ local $[ = 10;
+ my $five = 5;
+ print "not " unless $tary[5] == $tary[$five];
+ print "ok 72\n";
+}
+
+@tary = (0..50);
+tary();