Pam Derks wrote: > > Hi all, Hello,
> I have 2 files that contain a filename and # of hits > I've split the contents of these 2 files into %hash1 and %hash2 > I want to find out the difference in the # of hits > can someone shed some light on the approach I should take. > > I've gotten this far: > > sample data: > FILE1 > arts.html 95 > arttherapy.html 102 > award.html 277 > bayart.html 1 > best.html 1 > > FILE2 > arts.html 101 > arttherapy.html 103 > award.html 282 > bayart.html 2 > best.html 2 > splat.html 10 (note this is not in FILE1) > > DESIRED OUTPUT: > arts.html 6 > arttherapy.html 1 > award.html 10 > best.html 1 > splat.html 10 > > #!/usr/bin/perl -w use strict; > $dir = "/dept/unxmkt/bin/hits/news/by_month"; my $dir = '/dept/unxmkt/bin/hits/news/by_month'; > chomp(@ARGV); This serves no useful purpose (try entering a command line option with a newline on the end.) > $file1 = shift(@ARGV); > $file2 = shift(@ARGV); my $file1 = shift; my $file2 = shift; > print("$file1 $file2\n"); > > open(FILE1, "$dir/$file1.total") or die ("nope: $!"); > open(FILE2, "$dir/$file2.total") or die ("nope: $!"); > > while(<FILE1>){ > my(%hash1, $key1, $value1); You are declaring %hash1 as local to the while loop so it can't be used outside of this loop. > ($key1, $value1) = chomp && split; ^^^^^^^^ The chomp() is unnecessary as split() removes ALL whitespace characters (including \r and \n.) > $hash1{$key1} = $value1; > > for (keys %hash1){ %hash1 always has one key as it is created each time the loop starts. > print("$hash1{$key1}\n"); > } > > } > > print("------------------------------\n"); > > [snip] This should do what you want: #!/usr/bin/perl -w use strict; my $file1 = shift; my $file2 = shift; print "$file1 $file2\n"; print '-' x 30, "\n"; my %hash; open FILE, $file1 or die "nope: $!"; while ( <FILE> ) { my ( $key, $value ) = split; $hash{ $key } = $value; } close FILE; open FILE, $file2 or die "nope: $!"; while ( <FILE> ) { my ( $key, $value ) = split; if ( exists $hash{ $key } ) { # key exists in file1 so calculate difference $hash{ $key } = $value - $hash{ $key }; } else { # key is only in file2 $hash{ $key } = $value; } } close FILE; # print out the results (sorted) for my $key ( sort keys %hash ) { print "$key $hash{$key}\n"; } __END__ John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]