隨機訪問陣列元素

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];