use strict;
use Time::HiRes qw(time);
my @data=();
my @names=qw(albert arthur bernard bill charlie david jack jonh joseph mark michael peter steven);
my @surnames=qw(bell brown canfield cornwell devlin doyle golden hoffman maclean powell rowling tovard twain warlick);
my @places=qw(amsterdan athens belfast berlin bern brussels copenhagen helsinki lisbon london luxenbourg madrid oslo paris rome stockholm vaduz vienna);
for (my $i=0;$i<=1000000;$i++) {
my $name=$names[int(rand()*$#names)];
my $surname=$surnames[int(rand()*$#surnames)];
my $place=$places[int(rand()*$#places)];
my $age=int(rand()*50)+25;
my $rec={name=>$name,surname=>$surname,place=>$place,age=>$age};
push @data, $rec;
}
####
my @Fields=(
{ key => 'age', content=>35 },
{ key => 'place', content=>'london'},
);
my @Persons=@data;
my @Person2=@data;
print "Persons: $#Persons\nPerson2: $#Person2\n\n";
my $field;
my $person;
my $i=0;
####
my $ta=time();
foreach $field (@Fields) { # <- age and surname in this case
scalar(@Persons)==0 && last;
for ($i=0;$i{$field->{key}} eq $field->{content}) && next;
splice(@Persons,$i,1);
$i--;
}
}
my $tb=time();
####
my $use=1;
my @Rset=();
foreach $person (@Person2) {
$use=1;
foreach $field (@Fields) {
if ($person->{$field->{key}} ne $field->{content}) {
$use=0;
last;
}
}
if ($use) {
push @Rset, $person;
}
}
my $tc=time;
####
my $iab=$tb-$ta;
my $ibc=$tc-$tb;
print "TIMES:\nab: $iab\nbc: $ibc\n";
print "COUNTS:\nab: ", $#Persons,"\nbc: ",$#Rset,"\n";
####
mpneves@voyager perl$ ./test.pl
Persons: 1000000
Person2: 1000000
TIMES:
ab: 17.5640239715576
bc: 1.96199607849121
COUNTS:
ab: 1153
bc: 1153
mpneves@voyager perl$ ./test.pl
Persons: 1000000
Person2: 1000000
TIMES:
ab: 18.5665609836578
bc: 1.95595502853394
COUNTS:
ab: 1185
bc: 1185
mpneves@voyager perl$ ./test.pl
Persons: 1000000
Person2: 1000000
TIMES:
ab: 24.4221110343933
bc: 3.58428502082825
COUNTS:
ab: 1213
bc: 1213