use strict; use warnings; use Data::Dumper; my (@host, $key, $value, $line, $filename); my $rec_num = 0; my $dirname = "."; opendir( my $dir, $dirname) or die "cant opendir $dirname: $!"; while (defined ($filename = readdir($dir))){ next unless $filename =~ /\w+\.txt/; print "filename: $filename \n"; my $record = {}; open( my $fh , "<", $filename); while ($line = <$fh>){ chomp $line; next if $line =~ /^$/; next if $line =~ /[#{}]/; $line =~ /^\s*(\S+)\s*(\S+)/; $record->{$1} = $2; } close($fh); push @host, $record; $rec_num += 1; } closedir($dir); print Dumper(@host);