use strict; use warnings; use IO::File; my $filename = 'nt_data.txt'; my $fh = IO::File->new($filename) || die "Cannot open '$filename' for reading: $!\n"; my @nt_data; while (<$fh>) { chomp; my %x; foreach (split /,/) { my ($k, $v) = split /\s*=\s*/; # This line becomes unnecessary ... you weren't using $hashname anyways ... # if ($key =~ /^(LocalTran)(\w*)(Number)$/) { $hashname=$value; } $x{$k} = $v; } push @nt_data, \%x; } $fh->close;