#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $count = 0; my %hasHierarchy; $hasHierarchy{$_} = $count++ foreach @ARGV; while( my( $key, $value ) = each %hasHierarchy ){ print "$key: $value\n"; } # print Dumper \%hasHierarchy; __END__ $ perl test.pl POPE PATRIARCH ARCHBISHOP CARDINAL POPE: 0 CARDINAL: 3 ARCHBISHOP: 2 PATRIARCH: 1 #### #!/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% -- #### #!/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% --