This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Have newCONSTSUB pass the length to newXS
[perl5.git] / t / op / each_array.t
index b0665e1..6052805 100644 (file)
@@ -1,4 +1,4 @@
-#!./perl -w
+#!./perl
 
 BEGIN {
     chdir 't' if -d 't';
@@ -6,9 +6,11 @@ BEGIN {
     require './test.pl';
 }
 use strict;
-use vars qw(@array @r $k $v);
+use warnings;
+no warnings 'deprecated';
+use vars qw(@array @r $k $v $c);
 
-plan tests => 48;
+plan tests => 57;
 
 @array = qw(crunch zam bloop);
 
@@ -31,16 +33,8 @@ is ($r[0], 0);
 is ($r[1], 'crunch');
 ($k) = each @array;
 is ($k, 1);
-{
-    $[ = 2;
-    my ($k, $v) = each @array;
-    is ($k, 4);
-    is ($v, 'bloop');
-    (@r) = each @array;
-    is (scalar @r, 0);
-}
 
-my @lex_array = qw(PLOP SKLIZZORCH RATTLE PBLRBLPSFT);
+my @lex_array = qw(PLOP SKLIZZORCH RATTLE);
 
 (@r) = each @lex_array;
 is (scalar @r, 2);
@@ -51,12 +45,6 @@ is ($k, 1);
 is ($v, 'SKLIZZORCH');
 ($k) = each @lex_array;
 is ($k, 2);
-{
-    $[ = -42;
-    my ($k, $v) = each @lex_array;
-    is ($k, -39);
-    is ($v, 'PBLRBLPSFT');
-}
 (@r) = each @lex_array;
 is (scalar @r, 0);
 
@@ -78,17 +66,7 @@ my @keys;
 is ("@keys", "0 1 2");
 
 @keys = keys @lex_array;
-is ("@keys", "0 1 2 3");
-
-{
-    $[ = 1;
-
-    @keys = keys @array;
-    is ("@keys", "1 2 3");
-
-    @keys = keys @lex_array;
-    is ("@keys", "1 2 3 4");
-}
+is ("@keys", "0 1 2");
 
 ($k, $v) = each @array;
 is ($k, 0);
@@ -110,16 +88,6 @@ is ("@values", "@array");
 @values = values @lex_array;
 is ("@values", "@lex_array");
 
-{
-    $[ = 1;
-
-    @values = values @array;
-    is ("@values", "@array");
-
-    @values = values @lex_array;
-    is ("@values", "@lex_array");
-}
-
 ($k, $v) = each @array;
 is ($k, 0);
 is ($v, 'crunch');
@@ -130,3 +98,43 @@ is ("@values", "@array");
 ($k, $v) = each @array;
 is ($k, 0);
 is ($v, 'crunch');
+
+# reset
+while (each @array) { }
+
+# each(ARRAY) in the conditional loop
+$c = 0;
+while (($k, $v) = each @array) {
+    is ($k, $c);
+    is ($v, $array[$k]);
+    $c++;
+}
+
+# each(ARRAY) on scalar context in conditional loop
+# should guarantee to be wrapped into defined() function.
+# first return value will be 0 --> [#90888]
+$c = 0;
+$k = 0;
+$v = 0;
+while ($k = each @array) {
+    is ($k, $v);
+    $v++;
+}
+
+# each(ARRAY) in the conditional loop
+$c = 0;
+for (; ($k, $v) = each @array ;) {
+    is ($k, $c);
+    is ($v, $array[$k]);
+    $c++;
+}
+
+# each(ARRAY) on scalar context in conditional loop
+# --> [#90888]
+$c = 0;
+$k = 0;
+$v = 0;
+for (; $k = each(@array) ;) {
+    is ($k, $v);
+    $v++;
+}