This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add more tests for 'my @a =' OPpASSIGN_COMMON
authorDavid Mitchell <davem@iabyn.com>
Fri, 11 Mar 2011 13:36:42 +0000 (13:36 +0000)
committerDavid Mitchell <davem@iabyn.com>
Fri, 11 Mar 2011 13:40:07 +0000 (13:40 +0000)
bug #70171 was fixed a while ago. This just adds some more tests for the
same (already fixed) bug.

This time its a variant which makes @a already have content at the
'my @a =' declaration, but without requiring a closure.
 See also [perl #82110].

t/op/array.t

index c5d45d7..f995ea3 100644 (file)
@@ -7,7 +7,7 @@ BEGIN {
 
 require 'test.pl';
 
-plan (128);
+plan (130);
 
 #
 # @foo, @bar, and @ary are also used from tie-stdarray after tie-ing them
@@ -442,6 +442,28 @@ sub test_arylen {
  );
 }
 
+# [perl #70171], [perl #82110]
+{
+    my ($i, $ra, $rh);
+  again:
+    my @a = @$ra; # common assignment on 2nd attempt
+    my %h = %$rh; # common assignment on 2nd attempt
+    @a = qw(1 2 3 4);
+    %h = qw(a 1 b 2 c 3 d 4);
+    $ra = \@a;
+    $rh = \%h;
+    goto again unless $i++;
+
+    is("@a", "1 2 3 4",
+       'bug 70171 (self-assignment via my @x = @$x) - goto variant'
+    );
+    is(
+       join(" ", map +($_,$h{$_}), sort keys %h), "a 1 b 2 c 3 d 4",
+       'bug 70171 (self-assignment via my %x = %$x) - goto variant'
+    );
+}
+
+
 *trit = *scile;  $trit[0];
 ok(1, 'aelem_fast on a nonexistent array does not crash');