my %keymap = %{$_[0]}; #### my $file_name = shift; my $hr = shift; #### ... $hr->{$2} = $1; #### #!/usr/local/bin/perl use strict; my $ALWAYS_USE_REF = 1; main( @ARGV ); exit 0; sub main { my %hash; recursively_foo_my_hash( \%hash, 5 ); print_hash_ref_contents( \%hash ); return 1; } sub recursively_foo_my_hash { my $hr = shift; print "RFMH called with hash ref: $hr\n"; my %new_hash = %{ $hr }; my $depth = shift; $hr = \%new_hash unless $ALWAYS_USE_REF; return 1 unless $depth > 0; $hr->{"foo_$depth"} = rand(); # Add some data recursively_foo_my_hash( $hr, $depth - 1 ); return 1; } sub print_hash_ref_contents { my $hr = shift; print "Hash ref [$hr] contains:\n"; foreach my $k ( sort keys %$hr ) { print "$k -> $hr->{$k}\n"; } return 1; }