Retract #11156 since Sarathy has found that it breaks code:
Jarkko Hietaniemi [Sat, 8 Dec 2001 15:13:39 +0000 (15:13 +0000)]
http://bugs.ActiveState.com/show_bug.cgi?id=18457
http://bugs.ActiveState.com/show_bug.cgi?id=18858

p4raw-id: //depot/perl@13533

op.c
sv.c
t/op/pos.t

diff --git a/op.c b/op.c
index d633b47..d3253d7 100644 (file)
--- a/op.c
+++ b/op.c
@@ -2065,15 +2065,9 @@ Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
        right->op_type == OP_SUBST ||
        right->op_type == OP_TRANS)) {
        right->op_flags |= OPf_STACKED;
-       if ((right->op_type != OP_MATCH &&
-            ! (right->op_type == OP_TRANS &&
-               right->op_private & OPpTRANS_IDENTICAL)) ||
-           /* if SV has magic, then match on original SV, not on its copy.
-              see note in pp_helem() */
-           (right->op_type == OP_MATCH &&      
-            (left->op_type == OP_AELEM ||
-             left->op_type == OP_HELEM ||
-             left->op_type == OP_AELEMFAST)))
+       if (right->op_type != OP_MATCH &&
+            ! (right->op_type == OP_TRANS &&
+               right->op_private & OPpTRANS_IDENTICAL))
            left = mod(left, right->op_type);
        if (right->op_type == OP_TRANS)
            o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
diff --git a/sv.c b/sv.c
index fcabd8e..2f0875c 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -4455,9 +4455,9 @@ Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 nam
     mg->mg_moremagic = SvMAGIC(sv);
     SvMAGIC(sv) = mg;
 
-    /* Some magic contains a reference loop, where the sv and object refer to
-       each other.  To avoid a reference loop that would prevent such objects
-       being freed, we look for such loops and if we find one we avoid
+    /* Some magic sontains a reference loop, where the sv and object refer to
+       each other.  To prevent a avoid a reference loop that would prevent such
+       objects being freed, we look for such loops and if we find one we avoid
        incrementing the object refcount. */
     if (!obj || obj == sv ||
        how == PERL_MAGIC_arylen ||
index 7c4c1c5..f3bc23c 100755 (executable)
@@ -1,6 +1,6 @@
 #!./perl
 
-print "1..7\n";
+print "1..4\n";
 
 $x='banana';
 $x=~/.a/g;
@@ -19,21 +19,5 @@ $x = "test string?"; $x =~ s/\w/pos($x)/eg;
 print "not " unless $x eq "0123 5678910?";
 print "ok 4\n";
 
-# bug ID 20010704.003
-use Tie::Scalar;
-tie $y[0], Tie::StdScalar or die $!;
-$y[0] = "aaa";
-$y[0] =~ /./g;
-if (pos($y[0]) == 1) {print "ok 5\n"} else {print "not ok 5\n"}
-
-$x = 0;
-$y[0] = "aaa";
-$y[$x] =~ /./g;
-if (pos($y[$x]) == 1) {print "ok 6\n"} else {print "not ok 6\n"}
-untie $y[0];
-
-tie $y{'abc'}, Tie::StdScalar or die $!;
-$y{'abc'} = "aaa";
-$y{'abc'} =~ /./g;
-if (pos($y{'abc'}) == 1) {print "ok 7\n"} else {print "not ok 7\n"}
-untie $y{'abc'};
+
+