On Thu, Mar 12, 2009 at 00:19, Chap Harrison <[email protected]> wrote:
> Hello,
> I have a hash of hashes, and I'm trying to bulk-assign some key/value pairs
> to the referenced hash, using a technique I read on the perlmonks list (hash
> slices, see link below). I've never been good at working out syntax where
> complex data structures are concerned, and this eludes me completely. Could
> someone please help me with the syntax of the assignment, and retrieval of
> key/value pairs?
>
> Thanks - I appreciate it!
> Chap
> *************************
> #!/usr/bin/perl -d
>
> use strict;
> use warnings;
>
> my %schoolprops;
>
> # +
> -------------------------------------------------------------------------
> # | %schoolprops - a hash of references to hashes
> # |
> # | key value hash
> # | -----------
> -----------------------------------------------------------
> # | Adams --> {a => 1, ar => 19, af => 13, aw => 11}
> # | Baker --> {b => 2, bq => 20}
> # | Charlie --> {c => 3, cc => 33, cu => 38}
> # +
> -------------------------------------------------------------------------
>
> $schoolprops{Adams} = \{}; # map 'Adams' to a ref to an empty hash
>
> my $hashref = $schoolprops{Adams}; # create a ref to a hash.
>
> my @keys = ( 'a', 'ar', 'af', 'aw' );
> my @values = ( 1, 19, 13, 11);
>
> #
> # The following is trying to assign an array to a "hash slice".
> # (courtesy http://www.perlmonks.org/?node_id=4402, who did a simpler
> # version that did not involve references.)
> #
> @{{$hashref}->{...@keys}} = @values; # don't know if this is right
>
> while (my ($k, $v) = each %{$hashref}) { # this is just one of many things
> print "$k => $v\n"; # I've tried; this one fails at
> runtime.
> }
> #EOF
> *************************
Dereference the hashref as an arrayref then ask for the keys:
#!/usr/bin/perl
use strict;
use warnings;
my %hash = ( adams => {} );
my @keys = qw/a ar af aw/;
my @values = (1, 19, 13, 11);
@{$hash{adams...@keys} = @values;
use Data::Dumper;
print Dumper \%hash;
--
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/