in reply to comparison of two hashes

One way is to read each file into it's own HASHES OF ARRAYS data structure, then use Data::Comparator and Data::Dumper to display the differences between them:
use strict; use warnings; use Data::Comparator qw(data_comparator); use Data::Dumper; my $file1 = <<EOF; Cell: AND1 A1 A2 Y Cell: INV1 A Z EOF my $file2 = <<EOF; Cell: AND1 A B Y Cell: INV2 A Z EOF my $fh; my $cell; my %lib1; open $fh, '<', \$file1 or die "Can not open file: $!"; while (<$fh>) { chomp; if (/ ^ Cell: \s+ (.*) /x) { $cell = $1; } else { my @ports = split; push @{ $lib1{$cell} }, \@ports; } } my %lib2; open $fh, '<', \$file2 or die "Can not open file: $!"; while (<$fh>) { chomp; if (/ ^ Cell: \s+ (.*) /x) { $cell = $1; } else { my @ports = split; push @{ $lib2{$cell} }, \@ports; } } my $diff = data_comparator(\%lib1, \%lib2); print Dumper($diff) unless ($diff->is_empty()); __END__ $VAR1 = bless( { 'AND1' => bless( [ bless( [ bless( do{\(my $o = 'A')} +, 'Data::Differences' ), bless( do{\(my $o = 'B')} +, 'Data::Differences' ) ], +'Data::Differences' ) ], 'Data::Differences' ), 'INV2' => bless( do{\(my $o = [ [ 'A', 'Z' ] ])}, 'Data::Differences' ) }, 'Data::Differences' );

Replies are listed 'Best First'.
Re^2: comparison of two hashes
by blackgoat (Acolyte) on Feb 03, 2010 at 03:46 UTC
    Thanks a BUNCH! This helps a lot! Just one more small help from you, i am not sure i fully understand what this portion does:
    my $file1 = <<EOF; Cell: AND1 A1 A2 Y Cell: INV1 A Z EOF my $file2 = <<EOF; Cell: AND1 A B Y Cell: INV2 A Z EOF
    forgive me if its a stupid question! Thanks again!
      The <<EOF syntax is known as a "here-doc", which you can read about in Quote and Quote like Operators.

      I use it here to assign a multi-line string to a scalar variable. This was a convenient way for me to create a completely self-contained example which you could just copy-n-paste and run, without having to create 2 extra, external data files. Of course, in your application, you would read your 2 input files into your script.