use Benchmark qw {:all};
use 5.016;
my %hash;
# set up the hash
for (1001..2000) {
$hash{$_}++;
}
# two keys we use below
our $key1 = 1001;
our $key2 = 1002;
# hash key 1 is SV
$hash{$key1} = 1;
# hash key 2 is RV
$hash{$key2} = {1..10};
# assign to global as a baseline
our $xx_global;
# keys are short for formatting reasons
# (and kept the same as in the original post)
# char1: e = exists check, v = value check
# chars 2,3: ck = constant key, vk = variable key
# chars 4,5: sv = key contains scalar value, rv = key contains reference
# char 6: l = assign to lexical, g = assign to global
# thus
# ecksvl means "exists check using constant key, scalar value, assigned to lexical"
my %checks = (
evksvg => '$xx_global = exists $hash{$key1} ? 1 : 2',
vvksvg => '$xx_global = $hash{$key1} ? 1 : 2',
evkrvg => '$xx_global = exists $hash{$key2} ? 1 : 2',
vvkrvg => '$xx_global = $hash{$key2} ? 1 : 2',
);
cmpthese (
-2,
\%checks
);
####
Rate evkrvg vvksvg evksvg vvkrvg
evkrvg 25263440/s -- -5% -6% -6%
vvksvg 26588209/s 5% -- -1% -1%
evksvg 26896356/s 6% 1% -- -0%
vvkrvg 26916138/s 7% 1% 0% --
Rate evksvg evkrvg vvksvg vvkrvg
evksvg 25969403/s -- -1% -3% -4%
evkrvg 26171165/s 1% -- -2% -3%
vvksvg 26639554/s 3% 2% -- -1%
vvkrvg 26943132/s 4% 3% 1% --
Rate evkrvg vvkrvg evksvg vvksvg
evkrvg 26418063/s -- -2% -3% -5%
vvkrvg 27020119/s 2% -- -1% -3%
evksvg 27265486/s 3% 1% -- -2%
vvksvg 27927270/s 6% 3% 2% --
Rate vvksvg evkrvg evksvg vvkrvg
vvksvg 22526952/s -- -7% -9% -15%
evkrvg 24292879/s 8% -- -2% -8%
evksvg 24670397/s 10% 2% -- -7%
vvkrvg 26535260/s 18% 9% 8% --
####
Rate evkrvg evksvg vvkrvg vvksvg
evkrvg 11983737/s -- -13% -21% -21%
evksvg 13772688/s 15% -- -9% -10%
vvkrvg 15178025/s 27% 10% -- -0%
vvksvg 15245990/s 27% 11% 0% --
Rate evksvg evkrvg vvksvg vvkrvg
evksvg 14079720/s -- -2% -12% -13%
evkrvg 14319917/s 2% -- -11% -12%
vvksvg 16084312/s 14% 12% -- -1%
vvkrvg 16231025/s 15% 13% 1% --
Rate evksvg evkrvg vvkrvg vvksvg
evksvg 16847142/s -- -6% -13% -14%
evkrvg 17937967/s 6% -- -7% -9%
vvkrvg 19322856/s 15% 8% -- -2%
vvksvg 19628993/s 17% 9% 2% --
Rate evkrvg evksvg vvkrvg vvksvg
evkrvg 14452940/s -- -4% -8% -14%
evksvg 14982490/s 4% -- -5% -11%
vvkrvg 15741756/s 9% 5% -- -6%
vvksvg 16757529/s 16% 12% 6% --
####
Runs are numbered for reference.
A numbers with suffix "n" denotes that
an exists call was first or second fastest.
1
Rate evksvg evkrvg vvkrvg vvksvg
evksvg 14016791/s -- -3% -10% -10%
evkrvg 14502095/s 3% -- -7% -7%
vvkrvg 15591928/s 11% 8% -- -0%
vvksvg 15647458/s 12% 8% 0% --
2
Rate evksvg evkrvg vvksvg vvkrvg
evksvg 13784646/s -- -4% -14% -15%
evkrvg 14302757/s 4% -- -11% -12%
vvksvg 16046915/s 16% 12% -- -1%
vvkrvg 16215803/s 18% 13% 1% --
3
Rate evkrvg evksvg vvksvg vvkrvg
evkrvg 14185097/s -- -2% -11% -13%
evksvg 14413155/s 2% -- -9% -12%
vvksvg 15911268/s 12% 10% -- -3%
vvkrvg 16342816/s 15% 13% 3% --
4
Rate evkrvg evksvg vvksvg vvkrvg
evkrvg 14685190/s -- -0% -7% -10%
evksvg 14718917/s 0% -- -6% -10%
vvksvg 15741756/s 7% 7% -- -4%
vvkrvg 16386200/s 12% 11% 4% --
5
Rate evksvg evkrvg vvksvg vvkrvg
evksvg 14680062/s -- -1% -10% -11%
evkrvg 14760674/s 1% -- -10% -10%
vvksvg 16326796/s 11% 11% -- -1%
vvkrvg 16474871/s 12% 12% 1% --
6n
Rate vvkrvg evkrvg evksvg vvksvg
vvkrvg 13132131/s -- -4% -13% -14%
evkrvg 13640527/s 4% -- -10% -10%
evksvg 15088261/s 15% 11% -- -1%
vvksvg 15199441/s 16% 11% 1% --
7
Rate evkrvg evksvg vvkrvg vvksvg
evkrvg 13587332/s -- -4% -8% -16%
evksvg 14171127/s 4% -- -4% -12%
vvkrvg 14811159/s 9% 5% -- -8%
vvksvg 16155605/s 19% 14% 9% --
8n
Rate evksvg vvkrvg vvksvg evkrvg
evksvg 11707959/s -- -22% -24% -27%
vvkrvg 14986647/s 28% -- -2% -6%
vvksvg 15311861/s 31% 2% -- -4%
evkrvg 16023862/s 37% 7% 5% --
9
Rate evksvg evkrvg vvksvg vvkrvg
evksvg 14244165/s -- -3% -10% -12%
evkrvg 14642711/s 3% -- -8% -9%
vvksvg 15830158/s 11% 8% -- -2%
vvkrvg 16152573/s 13% 10% 2% --
10
Rate evksvg evkrvg vvkrvg vvksvg
evksvg 14121311/s -- -3% -11% -12%
evkrvg 14591640/s 3% -- -8% -9%
vvkrvg 15795394/s 12% 8% -- -2%
vvksvg 16083963/s 14% 10% 2% --
11n
Rate vvkrvg evkrvg evksvg vvksvg
vvkrvg 16824099/s -- -1% -3% -5%
evkrvg 17014413/s 1% -- -2% -4%
evksvg 17336475/s 3% 2% -- -2%
vvksvg 17730661/s 5% 4% 2% --
12
Rate evkrvg evksvg vvkrvg vvksvg
evkrvg 16192077/s -- -7% -15% -16%
evksvg 17375149/s 7% -- -9% -10%
vvkrvg 19072920/s 18% 10% -- -1%
vvksvg 19278927/s 19% 11% 1% --
13n
Rate evksvg vvkrvg evkrvg vvksvg
evksvg 17275592/s -- -3% -3% -7%
vvkrvg 17805106/s 3% -- -0% -4%
evkrvg 17812893/s 3% 0% -- -4%
vvksvg 18638037/s 8% 5% 5% --
14n
Rate evkrvg vvksvg evksvg vvkrvg
evkrvg 15942681/s -- -5% -7% -11%
vvksvg 16845763/s 6% -- -2% -5%
evksvg 17115273/s 7% 2% -- -4%
vvkrvg 17818450/s 12% 6% 4% --
15
Rate evksvg evkrvg vvkrvg vvksvg
evksvg 17140881/s -- -1% -8% -12%
evkrvg 17322469/s 1% -- -7% -11%
vvkrvg 18615359/s 9% 7% -- -4%
vvksvg 19401535/s 13% 12% 4% --
16
Rate evkrvg evksvg vvkrvg vvksvg
evkrvg 15344534/s -- -4% -17% -18%
evksvg 16026386/s 4% -- -13% -14%
vvkrvg 18390436/s 20% 15% -- -2%
vvksvg 18743663/s 22% 17% 2% --
17
Rate evksvg evkrvg vvkrvg vvksvg
evksvg 16758062/s -- -7% -10% -10%
evkrvg 17948695/s 7% -- -3% -4%
vvkrvg 18591773/s 11% 4% -- -0%
vvksvg 18662780/s 11% 4% 0% --
18
Rate evkrvg evksvg vvkrvg vvksvg
evkrvg 15643772/s -- -4% -11% -11%
evksvg 16250242/s 4% -- -7% -8%
vvkrvg 17501894/s 12% 8% -- -0%
vvksvg 17582178/s 12% 8% 0% --
19
Rate evksvg evkrvg vvksvg vvkrvg
evksvg 15403076/s -- -2% -17% -19%
evkrvg 15723064/s 2% -- -15% -17%
vvksvg 18470873/s 20% 17% -- -3%
vvkrvg 18964468/s 23% 21% 3% --
20
Rate evksvg evkrvg vvksvg vvkrvg
evksvg 13764563/s -- -6% -12% -15%
evkrvg 14649482/s 6% -- -7% -9%
vvksvg 15692295/s 14% 7% -- -3%
vvkrvg 16184162/s 18% 10% 3% --
21
Rate evksvg evkrvg vvkrvg vvksvg
evksvg 14479288/s -- -3% -6% -10%
evkrvg 14950644/s 3% -- -3% -7%
vvkrvg 15471803/s 7% 3% -- -3%
vvksvg 16022650/s 11% 7% 4% --
22
Rate evkrvg evksvg vvkrvg vvksvg
evkrvg 13734297/s -- -6% -12% -12%
evksvg 14573226/s 6% -- -7% -7%
vvkrvg 15677646/s 14% 8% -- -0%
vvksvg 15687019/s 14% 8% 0% --
23
Rate evksvg evkrvg vvksvg vvkrvg
evksvg 13885612/s -- -9% -12% -14%
evkrvg 15188495/s 9% -- -4% -6%
vvksvg 15800737/s 14% 4% -- -3%
vvkrvg 16232594/s 17% 7% 3% --
24
Rate evksvg evkrvg vvkrvg vvksvg
evksvg 13927062/s -- -10% -16% -17%
evkrvg 15464966/s 11% -- -7% -7%
vvkrvg 16566376/s 19% 7% -- -1%
vvksvg 16710598/s 20% 8% 1% --
25
Rate evkrvg evksvg vvksvg vvkrvg
evkrvg 13409022/s -- -5% -13% -15%
evksvg 14156262/s 6% -- -9% -11%
vvksvg 15472862/s 15% 9% -- -2%
vvkrvg 15859452/s 18% 12% 2% --
26
Rate evkrvg evksvg vvksvg vvkrvg
evkrvg 14159040/s -- -6% -8% -10%
evksvg 15036462/s 6% -- -3% -4%
vvksvg 15449998/s 9% 3% -- -1%
vvkrvg 15669876/s 11% 4% 1% --
27
Rate evksvg evkrvg vvksvg vvkrvg
evksvg 14418525/s -- -1% -11% -12%
evkrvg 14622963/s 1% -- -10% -11%
vvksvg 16220206/s 12% 11% -- -1%
vvkrvg 16421489/s 14% 12% 1% --
28
Rate evkrvg evksvg vvksvg vvkrvg
evkrvg 13445842/s -- -4% -12% -14%
evksvg 14037792/s 4% -- -8% -10%
vvksvg 15321097/s 14% 9% -- -2%
vvkrvg 15604214/s 16% 11% 2% --
29n
Rate vvkrvg evkrvg evksvg vvksvg
vvkrvg 11093337/s -- -20% -22% -30%
evkrvg 13940970/s 26% -- -2% -12%
evksvg 14248088/s 28% 2% -- -10%
vvksvg 15858079/s 43% 14% 11% --
30n
Rate evkrvg vvkrvg evksvg vvksvg
evkrvg 12109210/s -- -17% -17% -24%
vvkrvg 14554599/s 20% -- -0% -9%
evksvg 14593796/s 21% 0% -- -9%
vvksvg 16004545/s 32% 10% 10% --