use strict;
use warnings;
use Time::HiRes qw(time);
open my $name_infh, '<', 'path/to/names/list' or die $!;
open my $haystack_infh, '<', 'path/to/tab/delimited/list' or die $!;
my $t0 = time();
while(<$name_infh>) {}
while(<$haystack_infh>) {}
printf "Elapsed time: %-.03f\n", time-$t0;
####
use strict;
use warnings;
open my $name_infh => '<', 'path/to/names/list'
or die "Unable to open names list: $!\n";
open my $haystack_infh => '<', 'path/to/tab/del/file'
or die "Unable to open haystack file: $!\n";
my $name = <$name_infh>;
chomp $name;
while (my $line = <$haystack_infh>) {
my ($test_name, $payload) = split /\t/, $line, 2;
if ($name eq $test_name) {
print "We have a winner: $test_name => $payload";
$name = <$name_infh>;
last if !defined $name;
chomp $name;
}
}
####
my %want;
while(<$name_infh>) {
chomp;
$want{$_}++;
}
while (my $line = <$haystack_infh>) {
my ($test_name, $payload) = split /\t/, $line, 2;
if (exists $want{$test_name}) {
delete $want{$test_name};
print "We have a winner: $test_name => $payload";
last if ! keys %want;
}
}