# you're doing: return &Y::module_subroutine($hash_to_send); # should be: return &Y::module_subroutine(%hash_to_send); #### # you're doing: my($hash) = @_; # should be: my %hash = @_; #### # passing it in... return &Y::module_subroutine(\%hash_to_send); # and assigning it within the subroutine... my $hash = shift; # and when using it in the sub, be sure to dereference... return "The colour of the sky is " . $hash->{third_colour};