in reply to Re: How to remove duplicate key/value pairs in hash of array
in thread How to remove duplicate key/value pairs in hash of array

Here's how I solved my problem:

Beginning file:
open (BEGIN_FILE, "$beg_file") || die "Cannot open: $!\n"; while ($line = <BEGIN_FILE>) { chomp $line; next if ($line =~ /unknown|shutdown|NONE/); ($as,$as_name,$nbr,$rtr,$int,$address,$int_name,$ifindex,$vpi,$vc +i) = split(' ',$priv_line); $begin{$int_name} = $rtr; }
All the rest of the files:
foreach $file(@end) { open FILE, "$file" || die "Cannot open: $!\n"; while ($line = <FILE>) { chomp $line; next if ($line =~ /unknown|shutdown|NONE/); ($as,$as_name,$nbr,$rtr,$int,$address,$int_name,$ifindex,$vpi, +$vci) = split(' ',$priv_line); $end{$int_name} = $rtr; } }
Then, in order to end up with a hash of arrays, containing files that exist in my "non-beginning" files, but not in the beginning file:
my %good_files = (); foreach $key (sort keys %end) { if (!exists($begin{$key})){ push (@{$good_files{$begin{$key}}}, ($key)); } }
Works like a charm! Thanks to everyone for their help on this.

Replies are listed 'Best First'.
Re: Re: Re: How to remove duplicate key/value pairs in hash of array
by chipmunk (Parson) on Feb 21, 2001 at 03:33 UTC
    You've got an array of items that you don't want to contain duplicates. If you store those items as the keys of a hash instead of as the elements of an array, then you will never have duplicates. That's one of the features of a hash.

    So, instead of a hash of arrays, my suggestion is that you use a hash of hashes. When you want to get the list of ranks for a specific name, you would do: my @ranks = keys %{$HoH{$name}};