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};