in reply to two hashes in subroutin

Presumably you are calling your sub like this:

versatility( %hash1, %hash2 );

That doesn't work. All the keys and values will be assigned to %genome1 inside the subroutine and %genome2 will get nothing.

You need to re-write your subroutine to take hash references:

sub versatility { my( $genome1, $genome2 ) = @_; for my $key ( keys %{ $genome1 } ) { my @genome1 = $genome1->{ $key } =~ /(\d+)/g; my @genome2 = $genome2->{ $key } =~ /(\d+)/g; my $m = ( $genome1[1] - $genome2[1] ); my $n = ( $genome1[0] - $genome2[0] ); if( $n == 0 ){ print "number of occurance for $key in two genome are same +\n"; } else{ my $slope = $m / $n; print "domain versatility= $slope\n"; } } }

And then call it like this:

versatility( \%hash1, \%hash2 );

(BTW: Do start adding some horizontal whitespace into your code. It makes it so much more readable. Maybe then people would recognise your subroutine as a subroutine :)


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.