[tpm] Breaking a string up into hash keys
Richard Dice
rdice at pobox.com
Sat Apr 13 08:11:43 PDT 2013
My solution is to go recursive...
richard-dice-s-computer-9:Desktop rdice$ cat ./hashkeys.pl
#!/usr/bin/env perl
use warnings;
use strict;
use Data::Dumper qw ( Dumper );
my $conf;
$conf->{foo}{bar} = "a";
$conf->{baz} = "1";
$conf->{this}{and}{the}{other}{thing} = "what?";
my @joinkeys = qw (
foo::bar
baz
this::and::the::other::thing
);
foreach my $joinkey ( @joinkeys ) {
my @bits = split /::/, $joinkey;
print hashval($conf, \@bits);
print "\n";
}
exit 0;
sub hashval {
my ($hash, $keybits) = @_;
if ( ref($hash->{$keybits->[0]}) eq 'HASH' ) {
return hashval($hash->{$keybits->[0]}, [ @$keybits[1..$#$keybits]]);
} elsif ( ! ref($hash->{$keybits->[0]}) ) {
return $hash->{$keybits->[0]};
} else {
die "Foo! They key string you gave me doesn't correspond to a known
proper hash-of-hash entry within the 'conf' structure --> " .
Dumper($hash, $keybits);
}
}
richard-dice-s-computer-9:Desktop rdice$ ./hashkeys.pl
a
1
what?
On Sat, Apr 13, 2013 at 1:29 AM, Digimer <lists at alteeve.ca> wrote:
> Hi all,
>
> I've got a rather large, random-depth hash. ie:
>
> $conf->{foo}{bar} = "a";
> $conf->{baz} = "1";
> $conf->{this}{and}{the}{other}**{thing} = "what?";
>
> And so on. The number of hash keys can be quite varied, depending on the
> use.
>
> So now I want to be able to take a string that is in the format:
>
> foo::bar
> baz
> this::and::the::other::thing
>
> Split on the :: and use that to pull the value out of the hash.
>
> Any help would be much appreciated! :)
>
> --
> Digimer
> Papers and Projects: https://alteeve.ca/w/
> What if the cure for cancer is trapped in the mind of a person without
> access to education?
> ______________________________**_________________
> toronto-pm mailing list
> toronto-pm at pm.org
> http://mail.pm.org/mailman/**listinfo/toronto-pm<http://mail.pm.org/mailman/listinfo/toronto-pm>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/toronto-pm/attachments/20130413/eeae8018/attachment.html>
More information about the toronto-pm
mailing list