#!/usr/bin/perl -- use strict; use warnings; use Time::HiRes; use Benchmark qw/cmpthese/; my $href; use Data::Dump; sub substraliasSa { $href={}; open(my $fh, "<", "04.txt") or die $!; $_ = " " x 25; my $left = \substr ( $_, 0,10 ); my @right = ( \substr ( $_, 10,10 ), \substr ( $_, 20,5 ) ); push @{ $href->{ $$left } }, [ map $$_, @right ] while <$fh> ; close $fh; } sub substraliasSu { $href={}; open(my $fh, "<", "04.txt") or die $!; local $_ = " " x 25; my $left = \substr ( $_, 0,10 ); my @right = ( \substr ( $_, 10,10 ), \substr ( $_, 20,5 ) ); push @{ $href->{ $$left } }, [ map $$_, @right ] while <$fh> ; close $fh; } sub substraliasR4 { $href={}; open(my $fh, "<", "04.txt") or die $!; $_ = " " x 25; my $left = \substr ( $_, 0,10 ); my $right1 = \substr ( $_, 10,10 ); my $right2 = \substr ( $_, 20,5 ); push @{ $href->{ $$left } }, [ $$right1, $$right2, ] while <$fh> ; close $fh; } sub substraliasR3 { $href={}; open(my $fh, "<", "04.txt") or die $!; local $_ = " " x 25; my $left = \substr ( $_, 0,10 ); my $right1 = \substr ( $_, 10,10 ); my $right2 = \substr ( $_, 20,5 ); push @{ $href->{ $$left } }, [ $$right1, $$right2, ] while <$fh> ; close $fh; } sub substraliasR1 { $href={}; open(my $fh, "<", "04.txt") or die $!; my $record = " " x 25; my $left = \substr ( $record, 0,10 ); my $right1 = \substr ( $record, 10,10 ); my $right2 = \substr ( $record, 20,5 ); push @{ $href->{ $$left } }, [ $$right1, $$right2, ] while( $record = <$fh> ); close $fh; } sub substraliasR2 { $href={}; open(my $fh, "<", "04.txt") or die $!; my $record = " " x 25; my @rec = ( \substr ( $record, 0,10 ), \substr ( $record, 10,10 ), \substr ( $record, 20,5 ), ); push @{ $href->{ ${$rec[0]} } }, [ ${$rec[1]} , ${$rec[2]} ] while( $record = <$fh> ); close $fh; } sub substraliasCo { $href={}; open(my $fh, "<", "04.txt") or die $!; my $record = " " x 25; my @rec = ( \substr ( $record, 0,10 ), \substr ( $record, 10,10 ), \substr ( $record, 20,5 ), ); while( $record = <$fh> ){ push @{ $href->{ ${$rec[0]} } }, [ ${$rec[1]} , ${$rec[2]} ]; } close $fh; } sub substraliasYo { $href={}; open(my $fh, "<", "04.txt") or die $!; my $record = " " x 25; my @rec = ( \substr ( $record, 0,10 ), \substr ( $record, 10,10 ), \substr ( $record, 20,5 ), ); while( $record = <$fh> ){ push @{ $href->{ ${$rec[0]} } }, [ ${$rec[1]} , ${$rec[2]} ]; } close $fh; } sub substraliasBa { $href={}; open(my $fh, "<", "04.txt") or die $!; my $record = " " x 25; my @rec = ( \substr ( $record, 0,10 ), \substr ( $record, 10,10 ), \substr ( $record, 20,5 ), ); while( <$fh> ){ substr ($record, 0) = $_; push @{ $href->{ ${$rec[0]} } }, [ ${$rec[1]} , ${$rec[2]} ]; } close $fh; } sub substraliasFo { $href={}; open(my $fh, "<", "04.txt") or die $!; my $record = " " x 25; local $/ = \(25 + 2); my @rec = ( \substr ( $record, 0,10 ), \substr ( $record, 10,10 ), \substr ( $record, 20,5 ), ); ( substr ($record, 0) = $_ ), push @{ $href->{ ${$rec[0]} } }, [ ${$rec[1]} , ${$rec[2]} ] while <$fh>; close $fh; } sub test1{ $href={}; open(my $fh, "<", "04.txt") or die $!; while(<$fh>){ chomp; push @{ $href->{ substr($_,0,10)} }, [ substr($_,10,10), substr($_,20)]; } close $fh; } my %tests = ( T1 => \&test1, R1 => \&substraliasR1, R2 => \&substraliasR2, R3 => \&substraliasR3, R4 => \&substraliasR4, Co => \&substraliasCo, Yo => \&substraliasYo, Ba => \&substraliasBa, Fo => \&substraliasFo, Su => \&substraliasSu, Sa => \&substraliasSa, ); ## spin-up, ready the disk cache, cause sYo and sCo are identical but the bench results aren't test1(); substraliasR1(); substraliasR2(); substraliasR3(); substraliasR4(); substraliasCo(); substraliasYo(); substraliasBa(); substraliasFo(); substraliasSu(); substraliasSa(); sleep 10; print scalar gmtime, "\n"; cmpthese( 10, \%tests ); print scalar gmtime, "\n"; __END__ before spin-up #~ #~ Mon Sep 24 01:40:12 2012 #~ s/iter T1 Yo Sa Su Ba Fo R2 R4 R1 R3 Co #~ T1 1.58 -- -1% -2% -3% -12% -15% -27% -28% -28% -28% -40% #~ Yo 1.57 1% -- -2% -2% -11% -14% -27% -28% -28% -28% -39% #~ Sa 1.55 2% 2% -- -0% -10% -13% -26% -26% -27% -27% -38% #~ Su 1.54 3% 2% 0% -- -9% -12% -25% -26% -26% -27% -38% #~ Ba 1.40 13% 13% 11% 10% -- -4% -18% -19% -19% -19% -32% #~ Fo 1.35 17% 17% 15% 14% 4% -- -15% -16% -16% -16% -29% #~ R2 1.15 37% 37% 34% 34% 21% 17% -- -1% -1% -2% -17% #~ R4 1.14 39% 38% 36% 35% 23% 18% 1% -- -0% -1% -16% #~ R1 1.13 39% 39% 36% 36% 23% 19% 2% 0% -- -0% -16% #~ R3 1.13 40% 39% 37% 36% 23% 19% 2% 1% 0% -- -16% #~ Co 0.952 66% 65% 62% 62% 47% 42% 21% 20% 19% 19% -- #~ Mon Sep 24 01:42:37 2012 #~ #~ #~ Mon Sep 24 01:54:29 2012 #~ s/iter Yo T1 Su Sa Ba Fo R2 R3 R1 R4 Co #~ Yo 1.61 -- -1% -4% -4% -16% -16% -28% -29% -29% -29% -41% #~ T1 1.59 1% -- -2% -3% -15% -15% -27% -28% -28% -28% -40% #~ Su 1.55 4% 3% -- -1% -13% -13% -26% -26% -27% -27% -38% #~ Sa 1.54 4% 3% 1% -- -12% -12% -25% -26% -26% -26% -38% #~ Ba 1.35 19% 17% 15% 14% -- -0% -15% -16% -16% -16% -29% #~ Fo 1.35 19% 17% 15% 14% 0% -- -15% -16% -16% -16% -29% #~ R2 1.15 39% 38% 34% 34% 17% 17% -- -1% -1% -1% -17% #~ R3 1.14 41% 39% 36% 35% 19% 19% 1% -- -0% -0% -16% #~ R1 1.14 41% 40% 36% 35% 19% 19% 1% 0% -- -0% -16% #~ R4 1.14 41% 40% 36% 35% 19% 19% 1% 0% 0% -- -16% #~ Co 0.953 69% 66% 62% 61% 42% 42% 21% 20% 19% 19% -- #~ Mon Sep 24 01:56:54 2012 after spin-up Mon Sep 24 03:43:30 2012 s/iter Sa Su Ba Fo R2 Yo R3 R4 R1 Co T1 Sa 1.56 -- -0% -1% -9% -25% -26% -26% -26% -27% -28% -31% Su 1.55 0% -- -1% -9% -25% -25% -26% -26% -26% -28% -31% Ba 1.54 1% 1% -- -8% -24% -25% -25% -25% -26% -27% -30% Fo 1.42 10% 9% 8% -- -18% -18% -19% -19% -20% -21% -25% R2 1.16 34% 34% 32% 22% -- -0% -1% -1% -2% -4% -8% Yo 1.16 35% 34% 33% 23% 0% -- -0% -1% -1% -4% -8% R3 1.15 35% 35% 33% 23% 1% 0% -- -0% -1% -3% -7% R4 1.15 35% 35% 34% 24% 1% 1% 0% -- -1% -3% -7% R1 1.14 36% 36% 35% 24% 2% 1% 1% 1% -- -2% -6% Co 1.11 40% 39% 38% 27% 4% 4% 4% 3% 2% -- -4% T1 1.07 46% 45% 44% 33% 9% 8% 8% 7% 7% 4% -- Mon Sep 24 03:45:52 2012 Mon Sep 24 03:46:20 2012 s/iter Su Sa Ba Fo R2 Yo R4 R3 R1 Co T1 Su 1.55 -- -0% -5% -11% -25% -26% -26% -27% -27% -30% -31% Sa 1.54 0% -- -4% -11% -25% -25% -26% -26% -27% -30% -31% Ba 1.48 5% 4% -- -7% -22% -22% -23% -23% -23% -27% -27% Fo 1.38 12% 12% 7% -- -16% -16% -17% -17% -18% -22% -22% R2 1.16 34% 34% 28% 19% -- -0% -1% -1% -2% -7% -7% Yo 1.15 34% 34% 28% 19% 0% -- -1% -1% -2% -6% -7% R4 1.14 36% 35% 30% 21% 1% 1% -- -0% -1% -5% -6% R3 1.14 36% 36% 30% 21% 2% 1% 0% -- -0% -5% -6% R1 1.13 37% 36% 30% 21% 2% 2% 1% 0% -- -5% -6% Co 1.08 44% 43% 37% 28% 7% 7% 6% 6% 5% -- -1% T1 1.07 45% 44% 38% 29% 8% 8% 6% 6% 6% 1% -- Mon Sep 24 03:48:39 2012 with sleep Mon Sep 24 03:54:28 2012 s/iter Su Sa Ba Fo Yo R2 R3 R4 R1 Co T1 Su 1.56 -- -0% -4% -11% -25% -25% -26% -26% -26% -30% -31% Sa 1.56 0% -- -4% -11% -25% -25% -26% -26% -26% -30% -31% Ba 1.50 4% 4% -- -8% -22% -22% -23% -23% -23% -27% -28% Fo 1.39 13% 13% 8% -- -16% -16% -17% -17% -17% -21% -22% Yo 1.17 33% 33% 28% 18% -- -0% -1% -2% -2% -6% -7% R2 1.17 34% 34% 29% 19% 0% -- -1% -1% -1% -6% -7% R3 1.15 35% 35% 30% 20% 1% 1% -- -0% -0% -5% -6% R4 1.15 36% 36% 30% 20% 2% 1% 0% -- -0% -5% -6% R1 1.15 36% 36% 30% 20% 2% 1% 0% 0% -- -5% -6% Co 1.10 42% 42% 37% 26% 7% 6% 5% 5% 5% -- -1% T1 1.08 44% 44% 39% 28% 8% 8% 7% 6% 6% 1% -- Mon Sep 24 03:56:48 2012