随机访问数组元素

my @letters = ( 'a' .. 'z' );                # English ascii-bet

print $letters[ rand @letters ] for 1 .. 5;  # prints 5 letters at random

这个怎么运作

  • rand EXPR 期望标量值,因此 @letters 在标量上下文中进行评估
  • 标量上下文中的数组返回它包含的元素数(在本例中为 26)
  • rand 26 在区间 0 ≤ VALUE < 26 中返回一个随机小数。 (它永远不会是 26
  • 数组索引总是整数,所以 $letters[rand @letters]$letters[int rand @letters]
  • Perl 数组是零索引的,因此 $array[rand @array] 返回 $array[0]$array[$#array] 或其间的元素

(同样的原则适用于哈希)

my %colors = ( red   => 0xFF0000,
               green => 0x00FF00,
               blue  => 0x0000FF,
             );

print ( values %colors )[rand keys %colors];