ループ内では添字を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文はハッシュ値自体でなく、ハッシュ値のコピーのため、この機能は利用出来ない