use strict; use warnings; use Benchmark q{cmpthese}; my $inFile = q{/work/johngg/spw593475.dat}; open my $inFH, q{<}, $inFile or die qq{open: $inFile: $!\n}; my $startPos = tell $inFH; my $rcArray = sub { seek $inFH, $startPos, 0; my @lines = <$inFH>; chomp @lines; my %dataHash = (); foreach (@lines) { my ($key, $value) = split m{\|}, $_, 2; $dataHash{$key} = $value; } return \%dataHash; }; my $rcByLine = sub { seek $inFH, $startPos, 0; my %dataHash = (); while (<$inFH>) { chomp; my ($key, $value) = split m{\|}, $_, 2; $dataHash{$key} = $value; } return \%dataHash; }; my $rcMap = sub { seek $inFH, $startPos, 0; my %dataHash = map {chomp; split m{\|}, $_, 2} <$inFH>; return \%dataHash; }; cmpthese (10, { Array => $rcArray, ByLine => $rcByLine, Map => $rcMap, }); close $inFH or die qq{close: $inFile: $!\n}; #### $ spw593475 s/iter Array ByLine Map Array 1.30 -- -14% -15% ByLine 1.12 16% -- -1% Map 1.10 18% 1% -- $ spw593475 s/iter Array Map ByLine Array 1.43 -- -14% -18% Map 1.22 17% -- -5% ByLine 1.16 23% 5% -- $ spw593475 s/iter Array ByLine Map Array 1.31 -- -14% -15% ByLine 1.12 17% -- -0% Map 1.12 17% 0% -- $ spw593475 s/iter Array ByLine Map Array 1.31 -- -13% -15% ByLine 1.13 16% -- -1% Map 1.11 17% 1% -- $ spw593475 s/iter Array ByLine Map Array 1.30 -- -14% -16% ByLine 1.12 16% -- -3% Map 1.09 19% 3% -- $