"adam"
включено в результаты, потому что ваш массив @some
содержит только "adam\n"
.Чтобы исправить это, просто сделайте
chomp @some, @all;
или, если вы хотите быть параноиком по поводу разрывов строки DOS,
s/[\r\n]+$// for @some, @all;
перед вашим основным циклом.Тогда вам также не понадобится строка
$name =~ s/[\n\r]//mg;
внутри цикла.
Кроме того, если вы хотите, чтобы ваш код был быстрым, вы должны действительно использовать хеш вместомассив @some
, например:
my %some;
if (open SKIPLIST, "somenames.txt") {
while (my $name = <SKIPLIST>) {
chomp $name;
undef $some{$name}; # create the key $name in the hash %some
}
close SKIPLIST;
}
my @names;
if (open TESTLIST, "allnames.txt") {
while (my $name = <TESTLIST>) {
chomp $name;
push @names, $name unless exists $some{$name};
}
close TESTLIST;
}
print "Leftover: @names\n";