summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--op.c27
-rwxr-xr-xt/op/stat.t6
2 files changed, 20 insertions, 13 deletions
diff --git a/op.c b/op.c
index 4740afd1f1..4b00e0f30e 100644
--- a/op.c
+++ b/op.c
@@ -1670,19 +1670,22 @@ Perl_mod(pTHX_ OP *o, I32 type)
goto nomod;
break; /* mod()ing was handled by ck_return() */
}
- if (type != OP_LEAVESUBLV)
- o->op_flags |= OPf_MOD;
-
- if (type == OP_AASSIGN || type == OP_SASSIGN)
- o->op_flags |= OPf_SPECIAL|OPf_REF;
- else if (!type) {
- o->op_private |= OPpLVAL_INTRO;
- o->op_flags &= ~OPf_SPECIAL;
- PL_hints |= HINT_BLOCK_SCOPE;
+ if (type != OP_REFGEN ||
+ PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)) {
+ if (type != OP_LEAVESUBLV)
+ o->op_flags |= OPf_MOD;
+
+ if (type == OP_AASSIGN || type == OP_SASSIGN)
+ o->op_flags |= OPf_SPECIAL|OPf_REF;
+ else if (!type) {
+ o->op_private |= OPpLVAL_INTRO;
+ o->op_flags &= ~OPf_SPECIAL;
+ PL_hints |= HINT_BLOCK_SCOPE;
+ }
+ else if (type != OP_GREPSTART && type != OP_ENTERSUB
+ && type != OP_LEAVESUBLV)
+ o->op_flags |= OPf_REF;
}
- else if (type != OP_GREPSTART && type != OP_ENTERSUB
- && type != OP_LEAVESUBLV)
- o->op_flags |= OPf_REF;
return o;
}
diff --git a/t/op/stat.t b/t/op/stat.t
index dc47ef3885..8d0ca19bc0 100755
--- a/t/op/stat.t
+++ b/t/op/stat.t
@@ -9,7 +9,7 @@ BEGIN {
use Config;
-print "1..58\n";
+print "1..59\n";
$Is_MSWin32 = $^O eq 'MSWin32';
$Is_NetWare = $^O eq 'NetWare';
@@ -281,3 +281,7 @@ if (-f) {print "ok 57\n";} else {print "not ok 57\n";}
if (-f()) {print "ok 58\n";} else {print "not ok 58\n";}
unlink 'Op.stat.tmp' or print "# unlink failed: $!\n";
+
+# bug id 20011101.069
+my @r = \stat(".");
+if (@r == 13) { print "ok 59\n" } else { print "not ok 59\n" }