in reply to Hash user input

I assume that you mean you want to pass two hashes to a subroutine. You have already been told a few times that this can only be done by passing references. Although it is generally considered bad practice to do so, this fact can be hidden from the calling program by the use of prototypes. Note that the real arguments are converted to references. The subroutine must treat them as such.
use strict; use warnings; use Data::Dumper; sub some_sub (\%\%) { my ($hash_ref1, $hash_ref2) = @_; my %sub_hash1 = %$hash_ref1; my %sub_hash2 = %$hash_ref2; print Dumper( \%sub_hash1, \%sub_hash2 ); } do { my %hash1 = (key_a => 'value_a', key_b =>'value_b'); my %hash2 = (key_c => 'value_c', key_d =>'value_d'); some_sub( %hash1, %hash2 ); # Args appear to be hashes. } OUTPUT: $VAR1 = { 'key_b' => 'value_b', 'key_a' => 'value_a' }; $VAR2 = { 'key_d' => 'value_d', 'key_c' => 'value_c' };
Bill