Похоже, вы хотите напечатать значения, которые появляются нечетное количество раз.
Проблема с вашей попыткой состоит в том, что вы проверяете счетчики, прежде чем закончите получать счетчик различных значений!
Решение:
my %counts;
for my $arg (@ARGV) {
++$counts{$arg};
}
my @matches;
for my $arg (@ARGV) {
if ($counts{$arg} % 2 == 1) {
push @matches, $arg;
}
}
print("@matches\n");
Обратите внимание, что я изменил eq
на ==
, потому что eq
для сравнения строк.
Упрощенное решение:
my %counts;
++$counts{$_} for @ARGV;
my @matches = grep { $counts{$_} % 2 } @ARGV;
print("@matches\n");