#!/usr/bin/perl use strict; use warnings; use Data::Dumper; # use Benchmark qw(:all) ; # WindowsOS use Benchmark::Forking qw( timethese cmpthese ); # UnixOS sub whileLoop { my $localCount = 0; my %localHasHierarchy; while (defined(my $input = shift (@_))) { $localHasHierarchy{$input} = $localCount++; } return \%localHasHierarchy; } sub foreachLoop { my $localCount = 0; my %localHasHierarchy; $localHasHierarchy{$_} = $localCount++ foreach (@_); return \%localHasHierarchy; } # print Dumper whileLoop(@ARGV); # print Dumper foreachLoop(@ARGV); my $results = timethese(-10, { 'While' => sub { whileLoop(@ARGV) }, 'Foreach' => sub { foreachLoop(@ARGV) } }, 'none'); cmpthese( $results ); __END__ $ perl test.pl POPE PATRIARCH ARCHBISHOP CARDINAL Rate While Foreach While 719936/s -- -19% Foreach 889776/s 24% --