This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Test kv slices in places that expect %{}
authorFather Chrysostomos <sprout@cpan.org>
Fri, 13 Sep 2013 20:13:33 +0000 (13:13 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 13 Sep 2013 20:13:33 +0000 (13:13 -0700)
t/op/kvaslice.t
t/op/kvhslice.t

index a82a411..a1d9388 100644 (file)
@@ -8,7 +8,7 @@ BEGIN {
 
 # use strict;
 
-plan tests => 34;
+plan tests => 39;
 
 # simple use cases
 {
@@ -175,3 +175,21 @@ plan tests => 34;
     ok( !exists $a[3], "no autovivification" );
 }
 
+# keys/value/each treat argument as scalar
+{
+    my %h = 'a'..'b';
+    my @i = \%h;
+    my ($k,$v) = each %i[(0)]; # parens suppress "Scalar better written as"
+    is $k, 'a', 'key returned by each %array[ix]';
+    is $v, 'b', 'val returned by each %array[ix]';
+    %h = 1..10;
+    is join('-', sort keys %i[(0)]), '1-3-5-7-9', 'keys %array[ix]';
+    is join('-', sort values %i[(0)]), '10-2-4-6-8', 'values %array[ix]';
+}
+
+# \% prototype expects hash deref
+sub nowt_but_hash(\%) {}
+eval 'nowt_but_hash %_[0]';
+like $@, qr`^Type of arg 1 to main::nowt_but_hash must be hash \(not(?x:
+           ) index/value array slice\) at `,
+    '\% prototype';
index 6ca875d..bb0f3c1 100644 (file)
@@ -8,7 +8,7 @@ BEGIN {
 
 # use strict;
 
-plan tests => 38;
+plan tests => 43;
 
 # simple use cases
 {
@@ -189,3 +189,21 @@ plan tests => 38;
     ok( !exists $h{e}, "no autovivification" );
 }
 
+# keys/value/each treat argument as scalar
+{
+    my %h = 'a'..'b';
+    my %i = (foo => \%h);
+    my ($k,$v) = each %i{foo=>}; # => suppresses "Scalar better written as"
+    is $k, 'a', 'key returned by each %hash{key}';
+    is $v, 'b', 'val returned by each %hash{key}';
+    %h = 1..10;
+    is join('-', sort keys %i{foo=>}), '1-3-5-7-9', 'keys %hash{key}';
+    is join('-', sort values %i{foo=>}), '10-2-4-6-8', 'values %hash{key}';
+}
+
+# \% prototype expects hash deref
+sub nowt_but_hash(\%) {}
+eval 'nowt_but_hash %INC{bar}';
+like $@, qr`^Type of arg 1 to main::nowt_but_hash must be hash \(not(?x:
+           ) key/value hash slice\) at `,
+    '\% prototype';