Reading fields idiomatically
If you're determined to avoid using a module for this, how about something like the following:

my %config;
while (my $line = &lt;$configfh&gt;) {
    chomp $line;  # Strip trailing linefeeds, you probably don't want them there
    my @fields = split(/\s+/, $line);
    $config{$fields[0]} = $fields[1] if $fields[0];
}


But perhaps your config file may contain values with whitespace? If you can require those to be wrapped in quotes, or some other convenient character, that's not a problem.

my %config;
while (my $line = &lt;$configfh&gt;) {
    chomp $line;
    my ($field, $value) = split(/\s+/, $line, 2);  # The 2 is how many parts to split into
    if ($value =~ /^\"/) {
        $value =~ s/^\"(.*?)\"/$1/;  # Keep what's in the first pair of quotes
    } else {
        ($value, undef) = split(/\s+/, $value);  # Drop trailing comments
    }
    $config{$field} = $value if $field;
}


(Note that the " characters don't actually need escaping, but the syntax highlighting breaks otherwise...)

Obviously there are other possible cases which this doesn't cover, but if your use cases are that extensive, you should probably reconsider and use a module.