view release on metacpan or search on metacpan
0.004 2025-04-15 Released-By: PERLANCAR; Urgency: medium
- Add participant: Tree::RB::XS (thanks NERDVANA).
0.003 2023-10-06 Released-By: PERLANCAR; Urgency: medium
- Add dataset: iterating; add benchmark notes.
0.002 2023-10-05 Released-By: PERLANCAR; Urgency: low
- No functional changes.
- [build] Forgot to add dzil plugin to show images.
0.001 2023-10-05 Released-By: PERLANCAR
{
"abstract" : "List of modules that provide ordered hash data type",
"author" : [
"perlancar <perlancar@cpan.org>"
],
"dynamic_config" : 0,
"generated_by" : "Dist::Zilla version 6.032, CPAN::Meta::Converter version 2.150010",
"license" : [
"perl_5"
],
"meta-spec" : {
"url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
"version" : "0.10"
},
{
"class" : "Dist::Zilla::Plugin::PodnameFromFilename",
"name" : "@Author::PERLANCAR/PodnameFromFilename",
"version" : "0.02"
},
{
"class" : "Dist::Zilla::Plugin::PERLANCAR::EnsurePrereqToSpec",
"config" : {
"Dist::Zilla::Role::ModuleMetadata" : {
"Module::Metadata" : "1.000038",
"version" : "0.006"
}
},
"name" : "@Author::PERLANCAR/PERLANCAR::EnsurePrereqToSpec",
"version" : "0.064"
},
{
"class" : "Dist::Zilla::Plugin::PERLANCAR::MetaResources",
"name" : "@Author::PERLANCAR/PERLANCAR::MetaResources",
"version" : "0.043"
"version" : "0.001"
},
{
"class" : "Dist::Zilla::Plugin::CheckSelfDependency",
"config" : {
"Dist::Zilla::Plugin::CheckSelfDependency" : {
"finder" : [
":InstallModules"
]
},
"Dist::Zilla::Role::ModuleMetadata" : {
"Module::Metadata" : "1.000038",
"version" : "0.006"
}
},
"name" : "@Author::PERLANCAR/CheckSelfDependency",
"version" : "0.011"
},
{
"class" : "Dist::Zilla::Plugin::Git::Contributors",
"config" : {
"Dist::Zilla::Plugin::Git::Contributors" : {
}
],
"include_underscores" : 0
},
"Dist::Zilla::Role::MetaProvider::Provider" : {
"$Dist::Zilla::Role::MetaProvider::Provider::VERSION" : "2.002004",
"inherit_missing" : 1,
"inherit_version" : 1,
"meta_noindex" : 1
},
"Dist::Zilla::Role::ModuleMetadata" : {
"Module::Metadata" : "1.000038",
"version" : "0.006"
}
},
"name" : "@Author::PERLANCAR/MetaProvides::Package",
"version" : "2.004003"
},
{
"class" : "Dist::Zilla::Plugin::PERLANCAR::Authority",
"name" : "@Author::PERLANCAR/PERLANCAR::Authority",
"version" : "0.001"
"version" : "0.007"
},
{
"class" : "Dist::Zilla::Plugin::UploadToCPAN::WWWPAUSESimple",
"name" : "@Author::PERLANCAR/UploadToCPAN::WWWPAUSESimple",
"version" : "0.04"
},
{
"class" : "Dist::Zilla::Plugin::InsertDistImage",
"config" : {
"Dist::Zilla::Role::ModuleMetadata" : {
"Module::Metadata" : "1.000038",
"version" : "0.006"
}
},
"name" : "InsertDistImage",
"version" : "0.007"
},
{
"class" : "Dist::Zilla::Plugin::Prereqs",
"config" : {
"Dist::Zilla::Plugin::Prereqs" : {
---
abstract: 'List of modules that provide ordered hash data type'
author:
- 'perlancar <perlancar@cpan.org>'
build_requires:
File::Spec: '0'
IO::Handle: '0'
IPC::Open3: '0'
Test::More: '0'
configure_requires:
ExtUtils::MakeMaker: '0'
dynamic_config: 0
class: Dist::Zilla::Plugin::Rinci::AbstractFromMeta
name: '@Author::PERLANCAR/Rinci::AbstractFromMeta'
version: '0.10'
-
class: Dist::Zilla::Plugin::PodnameFromFilename
name: '@Author::PERLANCAR/PodnameFromFilename'
version: '0.02'
-
class: Dist::Zilla::Plugin::PERLANCAR::EnsurePrereqToSpec
config:
Dist::Zilla::Role::ModuleMetadata:
Module::Metadata: '1.000038'
version: '0.006'
name: '@Author::PERLANCAR/PERLANCAR::EnsurePrereqToSpec'
version: '0.064'
-
class: Dist::Zilla::Plugin::PERLANCAR::MetaResources
name: '@Author::PERLANCAR/PERLANCAR::MetaResources'
version: '0.043'
-
class: Dist::Zilla::Plugin::CheckChangeLog
name: '@Author::PERLANCAR/CheckChangeLog'
-
class: Dist::Zilla::Plugin::CheckMetaResources
name: '@Author::PERLANCAR/CheckMetaResources'
version: '0.001'
-
class: Dist::Zilla::Plugin::CheckSelfDependency
config:
Dist::Zilla::Plugin::CheckSelfDependency:
finder:
- ':InstallModules'
Dist::Zilla::Role::ModuleMetadata:
Module::Metadata: '1.000038'
version: '0.006'
name: '@Author::PERLANCAR/CheckSelfDependency'
version: '0.011'
-
class: Dist::Zilla::Plugin::Git::Contributors
config:
Dist::Zilla::Plugin::Git::Contributors:
git_version: 2.45.2
include_authors: 0
include_releaser: 1
-
class: Dist::Zilla::Plugin::FinderCode
name: '@Author::PERLANCAR/MetaProvides::Package/AUTOVIV/:InstallModulesPM'
version: '6.032'
include_underscores: 0
Dist::Zilla::Role::MetaProvider::Provider:
$Dist::Zilla::Role::MetaProvider::Provider::VERSION: '2.002004'
inherit_missing: 1
inherit_version: 1
meta_noindex: 1
Dist::Zilla::Role::ModuleMetadata:
Module::Metadata: '1.000038'
version: '0.006'
name: '@Author::PERLANCAR/MetaProvides::Package'
version: '2.004003'
-
class: Dist::Zilla::Plugin::PERLANCAR::Authority
name: '@Author::PERLANCAR/PERLANCAR::Authority'
version: '0.001'
-
class: Dist::Zilla::Plugin::OurDate
name: '@Author::PERLANCAR/OurDate'
class: Dist::Zilla::Plugin::Prereqs::CheckCircular
name: '@Author::PERLANCAR/Prereqs::CheckCircular'
version: '0.007'
-
class: Dist::Zilla::Plugin::UploadToCPAN::WWWPAUSESimple
name: '@Author::PERLANCAR/UploadToCPAN::WWWPAUSESimple'
version: '0.04'
-
class: Dist::Zilla::Plugin::InsertDistImage
config:
Dist::Zilla::Role::ModuleMetadata:
Module::Metadata: '1.000038'
version: '0.006'
name: InsertDistImage
version: '0.007'
-
class: Dist::Zilla::Plugin::Prereqs
config:
Dist::Zilla::Plugin::Prereqs:
phase: runtime
type: requires
name: Prereqs
Makefile.PL view on Meta::CPAN
# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.032.
use strict;
use warnings;
use ExtUtils::MakeMaker;
my %WriteMakefileArgs = (
"ABSTRACT" => "List of modules that provide ordered hash data type",
"AUTHOR" => "perlancar <perlancar\@cpan.org>",
"CONFIGURE_REQUIRES" => {
"ExtUtils::MakeMaker" => 0
},
"DISTNAME" => "Acme-CPANModules-OrderedHash",
"LICENSE" => "perl",
"NAME" => "Acme::CPANModules::OrderedHash",
"PREREQ_PM" => {
"strict" => 0
},
NAME
Acme::CPANModules::OrderedHash - List of modules that provide ordered
hash data type
VERSION
This document describes version 0.004 of Acme::CPANModules::OrderedHash
(from Perl distribution Acme-CPANModules-OrderedHash), released on
2025-04-15.
SYNOPSIS
To run benchmark with default option:
% bencher --cpanmodules-module OrderedHash
To run module startup overhead benchmark:
% bencher --module-startup --cpanmodules-module OrderedHash
For more options (dump scenario, list/include/exclude/add participants,
list/include/exclude/add datasets, etc), see bencher or run "bencher
--help".
DESCRIPTION
When you ask a Perl's hash for the list of keys, the answer comes back
unordered. In fact, Perl explicitly randomizes the order of keys it
returns everytime. The random ordering is a (security) feature, not a
bug. However, sometimes you want to know the order of insertion. These
modules provide you with an ordered hash; most of them implement it by
recording the order of insertion of keys in an additional array.
Tie::StoredOrderHash
Array::OrdHash
Provide something closest to PHP's associative array, where you can
refer elements by key or by numeric index, and insertion order is
remembered.
List::Unique::DeterministicOrder
Provide a list, not hash.
Tree::RB::XS
Multi-purpose tree data structure which can record insertion order
and act as an ordered hash. Use "track_recent => 1,
keys_in_recent_order => 1" options. Can be used as a tied hash, or
as an object (faster).
BENCHMARKED MODULES
Version numbers shown below are the versions used when running the
sample benchmark.
Tie::IxHash 1.23
(6 cores)*, OS: *GNU/Linux Ubuntu version 24.10*, OS kernel: *Linux
version 6.11.0-8-generic*.
Benchmark command (default options):
% bencher --cpanmodules-module OrderedHash
Result formatted as table (split, part 1 of 4):
#table1#
{dataset=>"insert 1000 pairs"}
+----------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
| participant | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest | errors | samples |
+----------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
| Tie::StoredOrderHash | 539 | 1.85 | 0.00% | 528.45% | 1.4e-06 | 22 |
| Tie::LLHash | 640 | 1.6 | 19.19% | 427.28% | 3.4e-06 | 20 |
| Array::OrdHash | 889 | 1.12 | 64.84% | 281.24% | 9.6e-07 | 20 |
| Tie::IxHash | 1080 | 0.928 | 99.73% | 214.65% | 6.1e-07 | 20 |
| Hash::Ordered | 1460 | 0.684 | 170.98% | 131.92% | 4.1e-07 | 20 |
| Tie::Hash::Indexed | 1600 | 0.62 | 196.91% | 111.67% | 9.6e-07 | 20 |
| Tree::RB::XS | 3400 | 0.3 | 528.45% | 0.00% | 5.4e-07 | 21 |
T:L: participant=Tie::LLHash
T:S: participant=Tie::StoredOrderHash
TH:I: participant=Tie::Hash::Indexed
TR:X: participant=Tree::RB::XS
The above result presented as chart:
Result formatted as table (split, part 2 of 4):
#table2#
{dataset=>"insert 1000 pairs + delete"}
+----------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
| participant | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest | errors | samples |
+----------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
| Tie::IxHash | 31 | 32 | 0.00% | 5838.76% | 4.8e-05 | 21 |
| Tie::StoredOrderHash | 310 | 3.3 | 875.00% | 509.10% | 8.6e-06 | 21 |
| Tie::LLHash | 376 | 2.66 | 1098.31% | 395.59% | 2.5e-06 | 20 |
| Array::OrdHash | 440 | 2.3 | 1289.81% | 327.31% | 6.1e-06 | 20 |
| Hash::Ordered | 610 | 1.6 | 1854.01% | 203.93% | 1.9e-06 | 20 |
| Tie::Hash::Indexed | 1060 | 0.946 | 3272.21% | 76.11% | 5.7e-07 | 20 |
| Tree::RB::XS | 1900 | 0.54 | 5838.76% | 0.00% | 6.3e-07 | 20 |
T:L: participant=Tie::LLHash
T:S: participant=Tie::StoredOrderHash
TH:I: participant=Tie::Hash::Indexed
TR:X: participant=Tree::RB::XS
The above result presented as chart:
Result formatted as table (split, part 3 of 4):
#table3#
{dataset=>"insert 1000 pairs + iterate 10 times"}
+----------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
| participant | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest | errors | samples |
+----------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
| Tie::StoredOrderHash | 71 | 14 | 0.00% | 508.52% | 2e-05 | 20 |
| Tie::LLHash | 75.4 | 13.3 | 5.52% | 476.69% | 1.2e-05 | 24 |
| Array::OrdHash | 87.2 | 11.5 | 22.04% | 398.65% | 1e-05 | 20 |
| Tie::IxHash | 107 | 9.36 | 49.51% | 307.02% | 2.5e-06 | 20 |
| Tie::Hash::Indexed | 171 | 5.85 | 139.18% | 154.42% | 5e-06 | 21 |
| Hash::Ordered | 250 | 4 | 250.17% | 73.78% | 6.1e-06 | 20 |
| Tree::RB::XS | 435 | 2.3 | 508.52% | 0.00% | 8.2e-07 | 20 |
T:L: participant=Tie::LLHash
T:S: participant=Tie::StoredOrderHash
TH:I: participant=Tie::Hash::Indexed
TR:X: participant=Tree::RB::XS
The above result presented as chart:
Result formatted as table (split, part 4 of 4):
#table4#
{dataset=>"insert 1000 pairs + return keys 100 times"}
+----------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
| participant | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest | errors | samples |
+----------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
| Tie::StoredOrderHash | 17 | 58 | 0.00% | 1439.14% | 6.1e-05 | 20 |
| Tie::LLHash | 20 | 50 | 16.39% | 1222.37% | 7.3e-05 | 20 |
| Array::OrdHash | 25 | 40 | 44.54% | 964.81% | 0.00011 | 21 |
| Tie::IxHash | 26.8 | 37.3 | 54.99% | 893.08% | 3.3e-05 | 20 |
| Tie::Hash::Indexed | 44 | 23 | 154.54% | 504.67% | 2.7e-05 | 20 |
| Hash::Ordered | 135 | 7.43 | 678.48% | 97.71% | 7.1e-06 | 20 |
| Tree::RB::XS | 270 | 3.8 | 1439.14% | 0.00% | 4.3e-06 | 20 |
T:I: mod_overhead_time=4 participant=Tie::IxHash
T:L: mod_overhead_time=4 participant=Tie::LLHash
T:S: mod_overhead_time=2 participant=Tie::StoredOrderHash
TH:I: mod_overhead_time=5 participant=Tie::Hash::Indexed
TR:X: mod_overhead_time=4 participant=Tree::RB::XS
perl -e1 (baseline): mod_overhead_time=0 participant=perl -e1 (baseline)
The above result presented as chart:
To display as an interactive HTML table on a browser, you can add option
"--format html+datatables".
FAQ
What is an Acme::CPANModules::* module?
An Acme::CPANModules::* module, like this module, contains just a list
of module names that share a common characteristics. It is a way to
categorize modules and document CPAN. See Acme::CPANModules for more
details.
What are ways to use this Acme::CPANModules module?
Aside from reading this Acme::CPANModules module's POD documentation,
name=Acme-CPANModules-OrderedHash
[Acme::CPANModules]
[@Author::PERLANCAR]
:version=0.610
; make sure we put this after PodWeaver to avoid getting mangled location
[InsertDistImage]
hosting=data
[Prereqs]
strict=0
[Prereqs / DevelopX_spec]
-phase=develop
-relationship=x_spec
Acme::CPANModules=0.1.12
lib/Acme/CPANModules/OrderedHash.pm view on Meta::CPAN
package Acme::CPANModules::OrderedHash;
use strict;
our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2025-04-15'; # DATE
our $DIST = 'Acme-CPANModules-OrderedHash'; # DIST
our $VERSION = '0.004'; # VERSION
our $LIST = {
summary => "List of modules that provide ordered hash data type",
description => <<'MARKDOWN',
When you ask a Perl's hash for the list of keys, the answer comes back
unordered. In fact, Perl explicitly randomizes the order of keys it returns
everytime. The random ordering is a (security) feature, not a bug. However,
sometimes you want to know the order of insertion. These modules provide you
with an ordered hash; most of them implement it by recording the order of
insertion of keys in an additional array.
Other related modules:
lib/Acme/CPANModules/OrderedHash.pm view on Meta::CPAN
module => 'List::Unique::DeterministicOrder',
description => <<'MARKDOWN',
Provide a list, not hash.
MARKDOWN
bench_tags => ["no_iterate"].
bench_code => sub {
my ($op, $numkeys, $numrep) = @_;
my $hash = List::Unique::DeterministicOrder->new(data=>[]);
for (1..$numkeys) { $hash->push("key$_") }
if ($op eq 'delete') {
for (1..$numkeys) { $hash->delete("key$_") }
} elsif ($op eq 'keys') {
for (1..$numrep) { my @keys = $hash->keys }
} elsif ($op eq 'iterate') {
for (1..$numrep) { while (my ($k,$v) = each %$hash) {} }
}
},
},
{
module => 'Tree::RB::XS',
description => <<'MARKDOWN',
Multi-purpose tree data structure which can record insertion order and act as an
ordered hash. Use `track_recent => 1, keys_in_recent_order => 1` options. Can
be used as a tied hash, or as an object (faster).
MARKDOWN
bench_code => sub {
my ($op, $numkeys, $numrep) = @_;
my $tree= Tree::RB::XS->new(compare_fn => 'str', track_recent => 1, keys_in_recent_order => 1);
for (1..$numkeys) { $tree->insert("key$_") }
lib/Acme/CPANModules/OrderedHash.pm view on Meta::CPAN
for (1..$numkeys) { $tree->delete("key$_") }
} elsif ($op eq 'keys') {
for (1..$numrep) { my @keys= $tree->keys }
} elsif ($op eq 'iterate') {
for (1..$numrep) { my $iter = $tree->iter; while (my $v = $iter->next) {} }
}
},
},
],
bench_datasets => [
{name=>'insert 1000 pairs', argv => ['insert', 1000]},
{name=>'insert 1000 pairs + delete', argv => ['delete', 1000]},
{name=>'insert 1000 pairs + return keys 100 times', argv => ['keys', 1000, 100]},
{name=>'insert 1000 pairs + iterate 10 times', argv => ['iterate', 1000, 10], exclude_participant_tags => ['no_iterate']},
],
};
1;
# ABSTRACT: List of modules that provide ordered hash data type
__END__
=pod
=encoding UTF-8
=head1 NAME
Acme::CPANModules::OrderedHash - List of modules that provide ordered hash data type
=head1 VERSION
This document describes version 0.004 of Acme::CPANModules::OrderedHash (from Perl distribution Acme-CPANModules-OrderedHash), released on 2025-04-15.
=head1 SYNOPSIS
To run benchmark with default option:
% bencher --cpanmodules-module OrderedHash
To run module startup overhead benchmark:
% bencher --module-startup --cpanmodules-module OrderedHash
For more options (dump scenario, list/include/exclude/add participants, list/include/exclude/add datasets, etc), see L<bencher> or run C<bencher --help>.
=head1 DESCRIPTION
When you ask a Perl's hash for the list of keys, the answer comes back
unordered. In fact, Perl explicitly randomizes the order of keys it returns
everytime. The random ordering is a (security) feature, not a bug. However,
sometimes you want to know the order of insertion. These modules provide you
with an ordered hash; most of them implement it by recording the order of
insertion of keys in an additional array.
lib/Acme/CPANModules/OrderedHash.pm view on Meta::CPAN
elements by key or by numeric index, and insertion order is remembered.
=item L<List::Unique::DeterministicOrder>
Provide a list, not hash.
=item L<Tree::RB::XS>
Multi-purpose tree data structure which can record insertion order and act as an
ordered hash. Use C<< track_recent =E<gt> 1, keys_in_recent_order =E<gt> 1 >> options. Can
be used as a tied hash, or as an object (faster).
=back
=head1 BENCHMARKED MODULES
Version numbers shown below are the versions used when running the sample benchmark.
lib/Acme/CPANModules/OrderedHash.pm view on Meta::CPAN
Run on: perl: I<< v5.40.1 >>, CPU: I<< AMD Ryzen 5 7535HS with Radeon Graphics (6 cores) >>, OS: I<< GNU/Linux Ubuntu version 24.10 >>, OS kernel: I<< Linux version 6.11.0-8-generic >>.
Benchmark command (default options):
% bencher --cpanmodules-module OrderedHash
Result formatted as table (split, part 1 of 4):
#table1#
{dataset=>"insert 1000 pairs"}
+----------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
| participant | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest | errors | samples |
+----------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
| Tie::StoredOrderHash | 539 | 1.85 | 0.00% | 528.45% | 1.4e-06 | 22 |
| Tie::LLHash | 640 | 1.6 | 19.19% | 427.28% | 3.4e-06 | 20 |
| Array::OrdHash | 889 | 1.12 | 64.84% | 281.24% | 9.6e-07 | 20 |
| Tie::IxHash | 1080 | 0.928 | 99.73% | 214.65% | 6.1e-07 | 20 |
| Hash::Ordered | 1460 | 0.684 | 170.98% | 131.92% | 4.1e-07 | 20 |
| Tie::Hash::Indexed | 1600 | 0.62 | 196.91% | 111.67% | 9.6e-07 | 20 |
| Tree::RB::XS | 3400 | 0.3 | 528.45% | 0.00% | 5.4e-07 | 21 |
lib/Acme/CPANModules/OrderedHash.pm view on Meta::CPAN
T:I: participant=Tie::IxHash
T:L: participant=Tie::LLHash
T:S: participant=Tie::StoredOrderHash
TH:I: participant=Tie::Hash::Indexed
TR:X: participant=Tree::RB::XS
The above result presented as chart:
=begin html
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAAH4CAMAAABUnipoAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAADDUExURf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...
=end html
Result formatted as table (split, part 2 of 4):
#table2#
{dataset=>"insert 1000 pairs + delete"}
+----------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
| participant | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest | errors | samples |
+----------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
| Tie::IxHash | 31 | 32 | 0.00% | 5838.76% | 4.8e-05 | 21 |
| Tie::StoredOrderHash | 310 | 3.3 | 875.00% | 509.10% | 8.6e-06 | 21 |
| Tie::LLHash | 376 | 2.66 | 1098.31% | 395.59% | 2.5e-06 | 20 |
| Array::OrdHash | 440 | 2.3 | 1289.81% | 327.31% | 6.1e-06 | 20 |
| Hash::Ordered | 610 | 1.6 | 1854.01% | 203.93% | 1.9e-06 | 20 |
| Tie::Hash::Indexed | 1060 | 0.946 | 3272.21% | 76.11% | 5.7e-07 | 20 |
| Tree::RB::XS | 1900 | 0.54 | 5838.76% | 0.00% | 6.3e-07 | 20 |
lib/Acme/CPANModules/OrderedHash.pm view on Meta::CPAN
T:I: participant=Tie::IxHash
T:L: participant=Tie::LLHash
T:S: participant=Tie::StoredOrderHash
TH:I: participant=Tie::Hash::Indexed
TR:X: participant=Tree::RB::XS
The above result presented as chart:
=begin html
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAAH4CAMAAABUnipoAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAADDUExURf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...
=end html
Result formatted as table (split, part 3 of 4):
#table3#
{dataset=>"insert 1000 pairs + iterate 10 times"}
+----------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
| participant | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest | errors | samples |
+----------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
| Tie::StoredOrderHash | 71 | 14 | 0.00% | 508.52% | 2e-05 | 20 |
| Tie::LLHash | 75.4 | 13.3 | 5.52% | 476.69% | 1.2e-05 | 24 |
| Array::OrdHash | 87.2 | 11.5 | 22.04% | 398.65% | 1e-05 | 20 |
| Tie::IxHash | 107 | 9.36 | 49.51% | 307.02% | 2.5e-06 | 20 |
| Tie::Hash::Indexed | 171 | 5.85 | 139.18% | 154.42% | 5e-06 | 21 |
| Hash::Ordered | 250 | 4 | 250.17% | 73.78% | 6.1e-06 | 20 |
| Tree::RB::XS | 435 | 2.3 | 508.52% | 0.00% | 8.2e-07 | 20 |
lib/Acme/CPANModules/OrderedHash.pm view on Meta::CPAN
T:I: participant=Tie::IxHash
T:L: participant=Tie::LLHash
T:S: participant=Tie::StoredOrderHash
TH:I: participant=Tie::Hash::Indexed
TR:X: participant=Tree::RB::XS
The above result presented as chart:
=begin html
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAAH4CAMAAABUnipoAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAADJUExURf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...
=end html
Result formatted as table (split, part 4 of 4):
#table4#
{dataset=>"insert 1000 pairs + return keys 100 times"}
+----------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
| participant | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest | errors | samples |
+----------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
| Tie::StoredOrderHash | 17 | 58 | 0.00% | 1439.14% | 6.1e-05 | 20 |
| Tie::LLHash | 20 | 50 | 16.39% | 1222.37% | 7.3e-05 | 20 |
| Array::OrdHash | 25 | 40 | 44.54% | 964.81% | 0.00011 | 21 |
| Tie::IxHash | 26.8 | 37.3 | 54.99% | 893.08% | 3.3e-05 | 20 |
| Tie::Hash::Indexed | 44 | 23 | 154.54% | 504.67% | 2.7e-05 | 20 |
| Hash::Ordered | 135 | 7.43 | 678.48% | 97.71% | 7.1e-06 | 20 |
| Tree::RB::XS | 270 | 3.8 | 1439.14% | 0.00% | 4.3e-06 | 20 |
lib/Acme/CPANModules/OrderedHash.pm view on Meta::CPAN
T:I: participant=Tie::IxHash
T:L: participant=Tie::LLHash
T:S: participant=Tie::StoredOrderHash
TH:I: participant=Tie::Hash::Indexed
TR:X: participant=Tree::RB::XS
The above result presented as chart:
=begin html
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAAH4CAMAAABUnipoAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAADMUExURf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...
=end html
=head2 Sample benchmark #2
Benchmark command (benchmarking module startup overhead):
% bencher --cpanmodules-module OrderedHash --module-startup
lib/Acme/CPANModules/OrderedHash.pm view on Meta::CPAN
T:L: mod_overhead_time=4 participant=Tie::LLHash
T:S: mod_overhead_time=2 participant=Tie::StoredOrderHash
TH:I: mod_overhead_time=5 participant=Tie::Hash::Indexed
TR:X: mod_overhead_time=4 participant=Tree::RB::XS
perl -e1 (baseline): mod_overhead_time=0 participant=perl -e1 (baseline)
The above result presented as chart:
=begin html
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAAH4CAMAAABUnipoAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAACKUExURf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAHwYACAAAAAAAAAAAAAAAACYANx...
=end html
To display as an interactive HTML table on a browser, you can add option C<--format html+datatables>.
=head1 FAQ
=head2 What is an Acme::CPANModules::* module?
An Acme::CPANModules::* module, like this module, contains just a list of module
names that share a common characteristics. It is a way to categorize modules and
document CPAN. See L<Acme::CPANModules> for more details.
=head2 What are ways to use this Acme::CPANModules module?
lib/Acme/CPANModules_ScenarioR/OrderedHash.pm view on Meta::CPAN
## no critic
package Acme::CPANModules_ScenarioR::OrderedHash;
our $VERSION = 0.004; # VERSION
our $results = do{my$var=[[200,"OK",[{_name=>"participant=Tie::StoredOrderHash",_succinct_name=>"T:S",errors=>1.4e-06,participant=>"Tie::StoredOrderHash",pct_faster_vs_slowest=>0,pct_slower_vs_fastest=>5.16666666666667,rate=>539,samples=>22,time=>1.8...
1;
# ABSTRACT: List of modules that provide ordered hash data type
=head1 DESCRIPTION
This module is automatically generated by Pod::Weaver::Plugin::Bencher::Scenario during distribution build.
A Acme::CPANModules_ScenarioR::* module contains the raw result of sample benchmark and might be useful for some stuffs later.
[@Author::PERLANCAR]
[-Acme::CPANModules]
[-Bencher::Scenario]
result_split_fields=dataset
chart=1