in reply to Re^4: trying to decide best data structure for problem at hand.
in thread trying to decide best data structure for problem at hand.

%entry is a HoHoH - Hash of Hash of Hash. The first hash is keyed by name. That accesses a hash keyed by UID. That accesses a hash keyed by various parameters including the host name. In the line:

my @hosts = map {$entries{$name}{$_}{host}} keys %{$entries{$name}};

we generate a list of the hosts associated with a particular name. The hosts are in the 'host' parameter in the hash accessed by UID.

keys %{$entries{$name}} generates a list of UIDs for a given name. Remember that hashes and arrays only store scalar values so what is stored is really a reference to a hash. So the % sigil in %{...} dereferences the hash reference to be a hash which keys then returns the list of keys for.

For each UID in the list map {$entries{$name}{$_}{host}} retreives the host name - the map generates an output list with each element from the input list replaced by the matching host name.


DWIM is Perl's answer to Gödel

Replies are listed 'Best First'.
Re^6: trying to decide best data structure for problem at hand.
by mikejones (Scribe) on Jan 08, 2007 at 20:18 UTC
    Ok thik I am getting this a little more. I printed it using Dumper like so:
    print Dumper(\%entries),"\n"; which produces 'kloesch' => { '291' => { 'gecos' => '', 'host' => '/home/dbsmith/passwd.sp +sdbp.hpux', 'gid' => '102' } }, 'sapdp4' => { '484' => { 'gecos' => '', 'host' => '/home/dbsmith/passwd.dud +bdv02.aix', 'gid' => '208' } },
    I have been banging my head at how to get at gecos and gid and uid in the right printed format. The output I would like it is:
    wlprdadm => uid #s, gid and gecos found on /home/dbsmith/passwd.eipdbmp1.hpux /home/dbsmith/passwd.carappp1.hpux but of course being uid, gid and gecos actual values. Finally, can a hash only contain keys like so: my %hash; my array= (a..d); $hash{$_}++ foreach @array;
    thank you

      I think the best help I can give you at this point is to send you back to school. ;)

      Take a wander around the Tutorials campus, especially check out the Data Types and Variables department. The Data Type: Hash courses will be of particular interest. You will find the texts perldata, perlref and perldsc are required reading for those courses.

      Enjoy your term back at school.


      DWIM is Perl's answer to Gödel
        yeah...i do need to understand hashes better b/c I do not seem to get them, but I got it working:
        for my $i ( keys %dub_hash ) { my $key = "$i -- "; if (keys (%{$dub_hash{$i}}) > 1) { print $key, join( "\n" . ' ' x length $key, keys %{ $dub_hash{ $i } } ),"\n"; } }
        thanks again.
        ##-- Create a HoHoH. 1st hash keyed by name, that accesses 2nd hash k +eyed by UID, that accesses 3rd hash keyed by remaining items: gid,gec +os and hostname --## $dub_hash{$name}{$uid} = { # User data keyed by uid gid => $gid, gecos => $gecos, host => $host,
        So this code creating 3 hashes one with a key of name and the next with a key of uid and gid, gecos and host are values in the last hash? thank you