私はPerlの世界に不慣れで、2つの配列を比較するスクリプトがあります。
比較にはList::MoreUtils
( )を使用します。each_arrayref
2つの質問があります:
1)each_arrayrefのように一度に単一の要素を比較する代わりに、配列の2つのチャンクを比較する方法はありますか(natatimeのようですが2つのarrayrefの場合)?
要素は、各配列の同じインデックスからのものである必要があります。
データ構造は次のようなものです。
{
atr => [qw/ a b c d /],
ats => [qw/ a b c d /],
att => [qw/ a b c d /],
}
これは私がこれまでに得たものです。
my @lists = keys %{$hash};
for (my $i = 0; $i <= @lists; $i++) {
my $list_one = $lists[$i];
my $one = $hash->{$list_one};
for (my $j = 0 ; $j <= @lists ; $j++) {
my $list_two = $lists[$j];
my $two = $hash->{$list_two};
my ($overlapping, $mismatch, $identity);
my $match = 0;
my $non_match = 0;
my $count_ac_calls = 0;
my $each_array = each_arrayref($one, $two);
while (my ($call_one, $call_two) = $each_array->()) {
if ((defined $call_one) && (defined $call_two)) {
if ($call_one eq $call_two) {
$match++;
}
if ($call_one ne $call_two) {
$non_match++;
}
}
} #end of while loop $each_array->()
print "$list_one,$list_two,$match,$non_match";
} #end of for j loop
} #end of for i loop
atr-> ats、atr-> att、ats->attを比較したいと思います。しかし、現在のコードでは、ats-> atr att-> atr、att->atsのように比較が繰り返されます。
2)どうすればそれらを回避できますか?