use strict;
use warnings;
no warnings 'deprecated';
-use vars qw(@array @r $k $v);
+use vars qw(@array @r $k $v $c);
-plan tests => 48;
+plan tests => 57;
@array = qw(crunch zam bloop);
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);
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);
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);
@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');
($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++;
+}