On Sun, Apr 13, 2008 at 4:27 PM, Kelly Jones
<[EMAIL PROTECTED]> wrote:
> I have a file with this in it:
>
>  a.b = 10
>  c.d.e = 11
>  f.g.h.i.j.k = 12
>
>  Based on that, I want to set:
>
>  $HASH{a}{b} = 10;
>  $HASH{c}{d}{e} = 11;
>  $HASH{f}{g}{h}{i}{j}{k} = 12;
>
>  This is easy using eval(), but is there a better way?
>
>  I realize that entries like "a.b = 10" and "a.b.c = 13" would
>  conflict, since setting $HASH{a}{b}{c} to 13 automatically sets
>  $HASH{a}{b} to a hashref. I've confirmed my file has no such conflicts.
snip

Something like this should work (warning untested):

my ($path, $val) = $line =~ /^(\S+)\s*=\s*(.*)$/;
my @keys = split /[.]/, $path;
my $ref = %HASH;
$ref = $ref->{$_} = {} for @keys[0 .. $#keys - 1];
$ref->{$keys[-1]} = $val;


-- 
Chas. Owens
wonkden.net
The most important skill a programmer can have is the ability to read.

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to