Skip to content

Instantly share code, notes, and snippets.

@schwern
Created June 14, 2014 19:04
Show Gist options
  • Select an option

  • Save schwern/6592165547b4ea0f65ef to your computer and use it in GitHub Desktop.

Select an option

Save schwern/6592165547b4ea0f65ef to your computer and use it in GitHub Desktop.
Benchmark List::MoreUtils::uniq() vs uniq() in Perl.
#!/usr/bin/perl
use v5.10;
use strict;
use warnings;
use Path::Tiny;
use List::MoreUtils qw(uniq);
use Benchmark qw(cmpthese);
my @uniqs = path("/usr/share/dict/words")->lines;
printf "%d elements\n", scalar @uniqs;
my @duplicates = ("blahblahblah") x scalar @uniqs;
sub uniq_perl (@) {
my %seen = ();
grep { not $seen{$_}++ } @_;
}
say "Uniques";
cmpthese shift, {
uniq_moreutils_xs => sub { my @b = uniq(@uniqs) },
uniq_perl => sub { my @b = uniq_perl(@uniqs) },
};
say "Duplicates";
cmpthese shift, {
uniq_moreutils_xs => sub { my @b = uniq(@duplicates) },
uniq_perl => sub { my @b = uniq_perl(@duplicates) },
};
__END__
235886 elements
Uniques
Rate uniq_perl uniq_moreutils_xs
uniq_perl 2.78/s -- -7%
uniq_moreutils_xs 2.99/s 8% --
Duplicates
Rate uniq_perl uniq_moreutils_xs
uniq_perl 29.4/s -- -51%
uniq_moreutils_xs 59.9/s 104% --
$ perl -v
This is perl 5, version 18, subversion 1 (v5.18.1) built for darwin-thread-multi-2level
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment