ループ内では添字を1回以上指定しない

・before 配列参照くりかえしよくない

for my $agent_num(0..$#operatives) {
  print "checking agent $agent_num\n";
  if ($on_disavowed_list{$operatives[$agent_num]}) {
    print "\t...$operatives[$agent_num] disavowed!\n"; # 
  }
}


・after1 配列参照をコピーする。この場合だと、値を変更出来ないケースとかある。

for my $agent_num(0..$#operatives) {
  my $agent = $operatives[$agent_num];
  print "checking agent $agent_num\n";
  if ($on_disavowed_list{$agent}) {
    print "\t...$agent disavowed!\n"; # 
  }
}


・after2 エイリアスをはる。これで値もかえられる!

use Data::Alias;


for my $agent_num(0..$#operatives) {
  alias my $agent = $operatives[$agent_num];
  print "checking agent $agent_num\n";
  if ($on_disavowed_list{$agent}) {
    $agent = "[DISAVOWED]";
    print "\t...$agent disavowed!\n"; # 
  }
}


after2にすることにより、配列の要素を参照せず、エイリアスへアクセスすることで高速化できる
※ただし、each文はハッシュ値自体でなく、ハッシュ値のコピーのため、この機能は利用出来ない