in reply to Simple hash assignment...or is it?

You can use the Data::Dumper module to investigate your hash and array structures.
use Data::Dumper; ... # insert after the first foreach loop. print Dumper(\@tcp_utilization_metrics);

Replies are listed 'Best First'.
Re: Re: Simple hash assignment...or is it?
by arootbeer (Novice) on Nov 22, 2003 at 01:05 UTC
    The Dumper output shows me the same thing as my own print statements: that there's some difference between the interface names I'm passing into the foreach block, and what's getting set as hash keys. It's a very confusing problem:
    $VAR1 = (                 
              'en0',          
              'en1'           
            );                
    en0: ent0                 
    ent0                      
    en1: ent1                 
    ent1                      
    $VAR1 = {                 
              'en0' => 'ent0',
              'en1' => 'ent1' 
            };                
    (empty line)
    (empty line)

    because, as you can see, the hash keys are the same string as the members of the array.

      I have rewritten your code to make it a bit Perl like. The following code is equivalent to your code -
      use strict; use Data::Dumper; my $network_ifs = `netstat -i | grep -Ev "lo|sit|link|Name" | cut -f1 +-d" " | uniq | sort -n`; my @tcp_utilization_metrics = split '\n', $network_ifs; my %tcp_utilization_adapter_names; foreach my $network_if (@tcp_utilization_metrics) { next if ! $network_if; # ignore empty lines if any my $if_name = $network_if; if ($network_if =~ /en/) { substr($network_if, 2, 0) = "t"; # insert 't' } elsif ($network_if =~ /tr/) { substr($network_if, 1, 2) = "ok"; # replace 'ok' } elsif ($network_if =~ /at/) { substr($network_if, 2, 0) = "m"; # insert 'm' } # insert hash entries $tcp_utilization_adapter_names{$if_name} = $network_if; } # investigate the hash foreach (keys %tcp_utilization_adapter_names) { print "$tcp_utilization_adapter_names{$_}\n"; }
      Perhaps you could tell us what is your expected hash output. I highly suspect that you want the following instead in your code (swap the key-value in the hash) -
      # insert hash entries $tcp_utilization_adapter_names{$network_if} = $if_name;

        Thanks...I'm sure you can tell I come from a C++/Java upbringing. The hash that Dumper displays is exactly what I want the hash to look like. The problem is that the keys (in @tcp_utilization_metrics) which are used to create the hash, don't seem to work to retrieve values from the hash. That's what has me so confused: both the hash and the array LOOK right, but something I don't know about ISN'T right.

        mpeppler figured it out for me...see below. Thanks for your help!