use strict; use warnings; use Data::Dumper; my %hash; my @array1 = qw( one two three ); my @array2 = qw( four five six ); my @array3 = qw( seven eight nine ); add_arrayref_to_hashref( \@array1, \%hash, 'key1' ); print "\nafter adding array1 using key1:\n", Dumper( \%hash ); add_arrayref_to_hashref( \@array2, \%hash, 'key1' ); print "\nafter adding array2 using key1:\n", Dumper( \%hash ); # getting a bit fancier here... my $array3ref = \@array3; add_arrayref_to_hashref( $array3ref, \%hash, ${ $array3ref }[1] ); print "\nafter adding array3 using ${ $array3ref }[1]:\n", Dumper( \%hash ); sub add_arrayref_to_hashref { my ( $arrayref, $hashref, $key ) = @_; push( @{ ${ $hashref }{$key} }, $arrayref ); }