use strict; use Data::Dumper; my $idx = 1; my %foo = ( bar => [1, 2, 3, ], ); print "foo before: " . Dumper \%foo; my $bar = 'bar'; my @deleted = splice @{ $foo{ $bar }}, $idx, 1; print "foo after: " . Dumper \%foo; print "Deleted: " . Dumper \@deleted; __END__ foo before: $VAR1 = { 'bar' => [ 1, 2, 3 ] }; foo after: $VAR1 = { 'bar' => [ 1, 3 ] }; Deleted: $VAR1 = [ 2 ];