Can you please specify what output you expect from the given sample files and why? You code does not output anything. To make it ouput something, I had to add the key among its values in hash1:
It then prints all the keys from hash2. That is probably not what you wanted.
BTW, my ($hash1, $hash2)= @ARGV or die "$!"; will return strange errors (or none at all) if no arguments are supplied.
@ARGV == 2 or die "Specify two arguments.\n";
should work better. Also, using double quotes in readhash("$hash1")
where $hash1 is a file name is useless. Just