sub copy_hash { my $hr = shift // return {}; # get hash to copy or return empty hashref if not given my %copy = (); while (my ($k, $v) = each %{$hr}) { $copy{$k} = $v; } return \%copy; }