In a spirit of inquiry and appreciation for the comments of other monks I ran all the working solutions through Time::Benchmark. Because no test is ever neutral, I've attached the script below for thems as is interested. The overall results are
10000 trials of abigail (781.550ms total), 78us/trial
10000 trials of broquaint (92.195s total), 9.220ms/trial
10000 trials of esper (676.783ms total), 67us/trial
10000 trials of ferrency (548.917ms total), 54us/trial
10000 trials of george_sherston1 (655.936ms total), 65us/trial
10000 trials of george_sherston2 (852.485ms total), 85us/trial
10000 trials of george_sherston3 (712.300ms total), 71us/trial
10000 trials of samtregar (1.303s total), 130us/trial
And here's the test script:
#! /usr/bin/perl -w
use strict;
use lib '/home/httpd/lib';
use Benchmark::Timer;
use Quantum::Superpositions;
my %methods = (
george_sherston1 => \&m1,
george_sherston2 => \&m2,
george_sherston3 => \&m3,
broquaint => \&m4,
abigail => \&m5,
ferrency => \&m6,
esper => \&m7,
samtregar => \&m8,
);
my @tabs = (
{
Action => 'GetAll',
Suppress => 0,
},
{
Action => 'Make',
Suppress => 0,
},
{
Action => 'MakeOnly',
Suppress => 0,
},
{
Action => 'foo',
Suppress => 0,
},
{
Action => 'bar',
Suppress => 0,
},
{
Action => 'baz',
Suppress => 0,
},
{
Action => 'goom',
Suppress => 0,
},
{
Action => 'gomp',
Suppress => 0,
},
);
for my $m (sort keys %methods) {
my $t = Benchmark::Timer->new(skip => 1);
for(0 .. 10000) {
$t->start($m);
$methods{$m}->();
$t->stop;
}
$t->report;
}
sub m1 {
for (@tabs) {
if (
$_->{Action} eq 'GetAll' or
$_->{Action} eq 'Make' or
$_->{Action} eq 'MakeOnly'
) {
$_->{Suppress} = 1;
}
}
}
sub m2 {
for my $hash (@tabs) {
if (grep {$hash->{Action} eq $_} qw/
GetAll
Make
MakeOnly
/) {
$hash->{Suppress} = 1;
}
}
}
sub m3 {
for (@tabs) {
if ($_->{Action} =~ /(^GetAll$)|(^Make$)|(MakeOnly$)/) {
$_->{Suppress} = 1;
}
}
}
sub m4 {
for (@tabs) {
if($_->{Action} eq any( qw(GetAll Make MakeOnly) )) {
$_->{Suppress} = 1;
}
}
}
sub m5 {
my %match = map {$_ => 1} qw /GetAll Make MakeOnly/;
for (@tabs) {
$_-> {Suppress} = 1 if $match {$_-> {Action}};
}
}
sub m6 {
for (@tabs) {
$_->{Suppress} ||= $_->{Action} =~ /^(GetAll|Make|MakeOnly)$/;
}
}
sub m7 {
my %defaults = (GetAll => 1, Make => 1, MakeOnly => 1);
for (@tabs) {
$_->{Suppress} = $defaults{$_->{Action}} if exists $defaults{$_-
+>{Action}};
}
}
sub m8 {
my %suppress = map { $_ => 1 } qw(GetAll Make MakeOnly);
for (@tabs) {
$_->{Suppress} = 1 if exists $suppress{$_};
}
}
§ George Sherston |