#! perl -slw use strict; use Time::HiRes qw[ time ]; our $N //= 1e5; my @strings = map sprintf( '%18.18b', int rand( 2**18 ) ), 1 .. $N; my %lookup = ( '101010101010101010' => [ 1350, 9234, 8889 ], '010101010101010101' => [ 1345, 2234, 3689 ], '111111111000000000' => [ 2256, 3370, 1340 ], ); my $start = time; my @vals = @{ $lookup{ $_ } // [0,0,0] } for @strings; printf "$N lookups took %f seconds\n", time() - $start; __END__ C:\test>junk 100000 lookups took 0.137553 seconds