#!/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($_ = shift (@_))) { $localHasHierarchy{$_} = $localCount++; } return \%localHasHierarchy; } sub foreachLoop { my $localCount = 0; my %localHasHierarchy; $localHasHierarchy{$_} = $localCount++ for (@_); 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 739404/s -- -17% Foreach 893518/s 21% --