[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