This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
lvref.t: Repeat bad ref tests with list assignment
authorFather Chrysostomos <sprout@cpan.org>
Thu, 2 Oct 2014 01:15:16 +0000 (18:15 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 11 Oct 2014 07:10:14 +0000 (00:10 -0700)
List assignment goes through a different code path.  The errors come
from magic_setlvref in that case, not pp_refassign.

t/op/lvref.t

index 2cd863b..50268a5 100644 (file)
@@ -4,7 +4,7 @@ BEGIN {
     set_up_inc("../lib");
 }
 
-plan 104;
+plan 111;
 
 sub on { $::TODO = ' ' }
 sub off{ $::TODO = ''  }
@@ -311,6 +311,28 @@ eval { \%::x = [] };
 like $@, qr/^Assigned value is not a HASH reference at/,
     'assigning non-hash ref to package hash ref';
 
+eval { my $x; (\$x) = 3 };
+like $@, qr/^Assigned value is not a reference at/,
+    'list-assigning non-ref';
+eval { my $x; (\$x) = [] };
+like $@, qr/^Assigned value is not a SCALAR reference at/,
+    'list-assigning non-scalar ref to scalar ref';
+eval { (\$::x = []) };
+like $@, qr/^Assigned value is not a SCALAR reference at/,
+    'list-assigning non-scalar ref to package scalar ref';
+eval { my @x; (\@x) = {} };
+like $@, qr/^Assigned value is not an ARRAY reference at/,
+    'list-assigning non-array ref to array ref';
+eval { (\@::x) = {} };
+like $@, qr/^Assigned value is not an ARRAY reference at/,
+    'list-assigning non-array ref to package array ref';
+eval { my %x; (\%x) = [] };
+like $@, qr/^Assigned value is not a HASH reference at/,
+    'list-assigning non-hash ref to hash ref';
+eval { (\%::x) = [] };
+like $@, qr/^Assigned value is not a HASH reference at/,
+    'list-assigning non-hash ref to package hash ref';
+
 eval '(\do{}) = 42';
 like $@, qr/^Can't modify reference to do block in list assignment at /,
     "Can't modify reference to do block in list assignment";