#!/usr/bin/perl use strict; use warnings; # use 5.010; use Benchmark qw/cmpthese :hireswallclock/; { my @chr=('a'..'z', 'A'..'Z'); sub genkeys { map { join '' => map $chr[rand @chr], (1) x (5 + rand 10); } 1..shift; } } my %hash=map {$_ => 1} genkeys 5000; my @test=(keys %hash, genkeys 5000); { $|++; local $\="\n"; open my $fh, '>', '/dev/null' or die "Can't open /dev/null: $!\n"; cmpthese -60 => { assign => sub () { for my $input (@test) { if (my $ans = $hash{$input}) { print $fh "$input => $ans"; } } }, double => sub () { for my $input (@test) { if (exists $hash{$input}) { print $fh $hash{$input}; } } } }; } __END__ #### kirk:~ [15:16:04]$ ./bm.pl Rate double assign double 29.4/s -- -1% assign 29.7/s 1% --