@array[0 ..0] is one and not zero elements!
DB<103> @array=a..f
=> ("a", "b", "c", "d", "e", "f")
DB<104> @array[0..0]
=> "a"
UPDATE:
your statistical proof falls into the trap
scalar @array != scalar (LIST)
if your function() returns a one element list (0), then scalar function() will be 0, since 0 is the last element of the list.
(more detailed in Re^2: Idiom to return 0 or random number of array elements by eyepopslikeamosquito )
initializing @array = 1..10 makes it more obvious, b/c the last element of a sublist is now identical to the length!
DB<106> @array = 1 .. 10;
=> (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
DB<107> sub x{ return @array[ 0 .. int( rand @array ) ]; };
=> 0
DB<108> $stats{ scalar( x() ) }++ for 1 .. 1000;
=> ""
DB<109> \%stats;
=> { 1 => 100, 2 => 101, 3 => 108, 4 => 108, 5 => 101, 6 => 103, 7 =>
+ 79, 8 => 98, 9 => 100, 10 => 102 }
|