#!/bin/perl5 use strict; use warnings; use Data::Dumper; my $distri; $distri = { # hash ref one => [qw{1 2 3}], # array ref two => [qw{3 4 5}], three => [qw{6 7 8}], }; my ($aref); my $key_new = 'four'; $aref = [qw{9 10 11}]; $distri = update_hash($distri, $key_new, $aref); my $key_existing = 'one'; $aref = [qw{12 13 14}]; $distri = update_hash($distri, $key_existing, $aref); print Dumper $distri; sub update_hash { # unpack and copy the arguments my ($href, $key, $aref) = @_; # key will be created if it doesn't exist # (autovivified) push @{$href->{$key}}, @{$aref}; # append # $href->{$key} = $aref; # overwrite # return the copy # (leaving the original intact) return $href; }