my %hash; my @ordered_keys; while ( my $line = ) { chomp $line; next unless $line; my ( $key, $value ) = split /\s*=\s*/, $line; $hash{$key} = $value; push @ordered_keys, $key; } # No need to sort - @ordered_keys is already in the right sequence... print "$_ = $hash{$_}\n" for @ordered_keys;