#!/usr/bin/perl -w require 5; use strict; use Benchmark; use vars qw( $hash_size %random_hash $num ); $num = 2; $hash_size = 1000; # Generate random hash my $r; for ($r=1; $r<=$hash_size; $r++) { $random_hash{"$r"} = int(rand(1000)); } sub Lowest(\%) { my $hashref = shift; my %hash = %{$hashref}; my $position; my $current; my @lowest; for ($position=0; $position<$num; $position++) { my $min; my $elem; foreach $elem (keys %hash) { if (!defined($min) || $hash{$elem} < $min) { $min = $hash{$elem}; $current = $elem; } } $lowest[$position] = $min; delete $hash{$current}; last if !(%hash); } return @lowest; } sub Sort(\%) { my $hashref = shift; my %hash = %{$hashref}; my @lowest = (sort {$b <=> $a} values %hash)[0..--$num]; return @lowest; } timethese ( -20, { 'Method 1' => 'Lowest(%random_hash)', 'Method 2' => 'Sort(%random_hash)' }); exit;