in reply to Re^2: Setting a multi-dimensional hash value
in thread Setting a multi-dimensional hash value
Yes, it certainly looks like it can be shortened. I also also played around with a prototype version so you don't have to explicitly take the reference to the hash:
#!/usr/bin/env perl use strict; use warnings; use Data::Dumper; sub set_hash(+$@) { my $hr = shift; my $val = shift; my $last_key = pop; while (@_) { my $key = shift; $hr->{$key} = {} if ! exists $hr->{$key}; $hr = $hr->{$key}; } $hr->{$last_key} = $val; } my %h; set_hash(%h, 42, 'a', 'b', 'c'); set_hash(%h, 69, 'x', 0, 'z'); set_hash(%h, 69, 'x', 0, 'y'); set_hash(%h, 'jock', 'shock'); set_hash(%h, 'value', 'abc', 'def', 'ghi', 'jkl', 'xyz'); print Dumper(\%h); my $h2 = {}; set_hash($h2, 42, 'a', 'b', 'c'); set_hash($h2, 69, 'x', 0, 'z'); set_hash($h2, 69, 'x', 0, 'y'); set_hash($h2, 'jock', 'shock'); set_hash($h2, 'value', 'abc', 'def', 'ghi', 'jkl', 'xyz'); print Dumper($h2);
Update: Repaired typo.
...roboticus
When your only tool is a hammer, all problems look like your thumb.
|
|---|