Perl: hash to ini
I'm a big fan of .ini
files because they're human readable, and also very machine readable. I wrote a quick function to convert a hashref to a simple .ini
string.
my $str = hash_to_ini({ data => { 'name' => 'scott', animal => 'dog' }});
sub hash_to_ini {
my $x = $_[0];
my $ret = '';
foreach my $key (sort(keys(%$x))) {
my $val = $x->{$key};
if (ref($val) eq "HASH") {
$ret .= "[$key]\n";
foreach my $k (sort(keys(%$val))) { $ret .= "$k = " . $val->{$k} . "\n"; }
} else { $ret .= "$key = $val\n" }
}
$ret =~ s/\n\[/\n\n[/; # Add a space between sections
return $ret;
}
I also wrote a version in PHP
function hash_to_ini($x) {
$ret = '';
foreach (array_keys($x) as $key) {
$val = $x[$key];
if (is_array($val)) {
$ret .= "[$key]\n";
foreach (array_keys($val) as $k) { $ret .= "$k = " . $val[$k] . "\n"; }
} else { $ret .= "$key = $val\n"; }
}
$ret = preg_replace("/\n\[/", "\n\n[", $ret);
return $ret;
}
Note: see also parse_ini()