perl: dereferencing a hash of hashes


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting perl: dereferencing a hash of hashes
# 1  
Old 11-10-2011
perl: dereferencing a hash of hashes

Hi there, I am trying to dereference my hash of hashes but post dereferencing, it seems to lose its structure I am using Data::dumper to help me anaylise.

This is the code im using to build the HoH, (data comes from a file). I have also performed a Dumper on the data structure before and after dereferencing.



Code:
 
sub hashcreate() {
        open(IN, "/var/tmp/myrulesfile");
               while (<IN>) {
                       chomp();  # remove line feed
                       my ($rule_id,$user,$group,$access)  = split(/\|/);
                        $hashref->{ $rule_id } = {
                               rule_id => $rule_id,
                               user   => $user,
                               group  => $group,
                               access => $access,
                       };
               }
         close(IN);
  return $hashref;
}
 
 
### Run the subroutine
hashcreate();
 
### Do a Dumper on the referenced hash
print Dumper($hashref);
 
### Dereference the hash
my %hash = %$hashref;
 
### Do a Dumper on the DE-referenced hash
print Dumper(%hash);

The output for my referenced hash is fine and looks like this

Code:
 
$VAR1 = {
          '1' => {
                   'user' => 'peter',
                   'group' => 'sysadmins',
                   'rule_id' => '1',
                   'access' => 'allow'
                 },
          '0' => {
                   'user' => 'steve',
                   'group' => 'finance',
                   'rule_id' => '0',
                   'access' => 'allow'
                 },
          '2' => {
                   'user' => 'john',
                   'group' => 'dbas',
                   'rule_id' => '2',
                   'access' => 'deny'
                 },
        };

But after I dereference using

Code:
 
# Dereference the hash
my %hash = %$hashref;

my Dumper looks like this

Code:
 
$VAR1 = '1'
$VAR2 = {
                   'user' => 'peter',
                   'group' => 'sysadmins',
                   'rule_id' => '1',
                   'access' => 'allow'
                 },
$VAR3 = '0'
$VAR4 =  {
                   'user' => 'steve',
                   'group' => 'finance',
                   'rule_id' => '0',
                   'access' => 'allow'
                 },
$VAR5 = '2'
$VAR6 =  {
                   'user' => 'john',
                   'group' => 'dbas',
                   'rule_id' => '2',
                   'access' => 'deny'
                 },

It seems to have taken my hash of hashes and converted them into a series of scalars and singular hashes.

Is my dereferencing code wrong? will that only work on a singular hash as opposed to a hash of hashes?

any help would be greatly appreciated.
# 2  
Old 11-10-2011
Your dereferencing works just fine. The "problem" is how Perl thinks about hashes: a hash is basically an even sized array, with the first element being the key, and the second the associated value. Data:Smilieumper gets that data, and interprets it as an array, for which it dumps the individual elements: first the key, then the value, first a scalar, then a hash reference.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Perl hash of hashes anonymous array

Hello experts. I'm having problems with a snippet of code. I was hoping to get help/advice to correct. A file that this script parses has changed to the point where I can no longer use a scalar, it looks as though I need to create an array for a hash of hashes below. The first output of... (1 Reply)
Discussion started by: timj123
1 Replies

2. Shell Programming and Scripting

Compare values of hashes of hash for n number of hash in perl without sorting.

Hi, I have an hashes of hash, where hash is dynamic, it can be n number of hash. i need to compare data_count values of all . my %result ( $abc => { 'data_count' => '10', 'ID' => 'ABC122', } $def => { 'data_count' => '20', 'ID' => 'defASe', ... (1 Reply)
Discussion started by: asak
1 Replies

3. Shell Programming and Scripting

hash of hashes : how to print reference and its internal structure?

#use perl 5.8.5; my %h1=(a=>'b', c=>'d'); my %h2=(a1=>'b1', c1=>'d1'); my $R1=\%h1; my $R2=\%h2; my %h= {$R1, $R2}; my $href=\%h; # hash of hashes foreach my $key (keys %$href){ print "Z::$$href{$key}\n" } When I am trying to print elements of hash of hashes, it prints HASH... (1 Reply)
Discussion started by: shristi
1 Replies

4. Shell Programming and Scripting

Dereferencing in PERL

Hi, This should be a simple one. All I am doing is adding an email address to my email. Example abc@xyz.com I understand that the @ means arrays in PERL. So, I coded the backtick (`) to dereference it. But now I get abc`@`xyz.com Your help is appreciated. Thanks Nurani (2 Replies)
Discussion started by: nurani
2 Replies

5. Shell Programming and Scripting

Dereferencing (?) in Perl

Hi, i want to print the mail exchange servers for a domain using the code below, the problem is that i just get the memory locations (?) of the elements in the output, instead of the mx servers. I really tried to find a solution, but i guess that i just don't get it (objects, OOP etc).. :) ... (2 Replies)
Discussion started by: mjoh
2 Replies

6. Shell Programming and Scripting

PERL - another quick hash of hashes question

Hi, sorry, two hash related questions in one day .. but this has got me a bit stuck. I have a mysql database table that kind of looks like this, the table is called "view1" and a snippet of that table (SELECT'ing just rows with serial number 0629AN1200) is below serial nic_name ... (2 Replies)
Discussion started by: hcclnoodles
2 Replies

7. Shell Programming and Scripting

PERL - printing a hash of hashes to screen

Hi there I have a hash of hashes made up of the following data bge0|100|half|10.36.100.21 bge1|1000|full|10.36.100.22 bge2|1000|full|10.36.100.23 which when i turn into a hash, would look like this inside the system bge0 -> nic_speed -> 100 nic_duplex -> half ... (6 Replies)
Discussion started by: hcclnoodles
6 Replies

8. Shell Programming and Scripting

perl hash of hashes from database

hi there, I have some database output that looks like this SELECT nic_name,nic_duplex,nic_speed,nic_ip FROM network_table WHERE hostname = "server1" result is this (ive delimited with a pipe for ease of reading) bge0|full|1000|10.32.100.1 bge1|full|1000|11.12.101.7 ... (1 Reply)
Discussion started by: hcclnoodles
1 Replies

9. Shell Programming and Scripting

Print Entire hash list (hash of hashes)

I have a script with dynamic hash of hashes , and I want to print the entire hash (with all other hashes). Itried to do it recursively by checking if the current key is a hash and if yes call the current function again with refference to the sub hash. Most of the printing seems to be OK but in... (1 Reply)
Discussion started by: Alalush
1 Replies

10. Shell Programming and Scripting

Perl hashes "Can't use subscript on private hash"

This is driving me mad, where am I going wrong? The relevant segment of code: sub getndsybcons { my @servers=@{$_}; my @sybservers=@{$_}; my %results; foreach my $server(@servers) { my $biggestsyb; my $biggestsybval=0; ... (9 Replies)
Discussion started by: Smiling Dragon
9 Replies
Login or Register to Ask a Question