use strict; use warnings; use Data::Dumper; my %h = ( 'list' => { 'find' => [ { 'type' => 'error', 'column' => '1', }, { 'type' => 'warning', 'column' => '2', }, { 'type' => 'warning', 'column' => '3', } ] }, ); print Dumper (\%h); #use pop for last element #pop @{$h{list}->{find}}; #use slice for any other element @{$h{list}->{find}} = @{$h{list}->{find}}[0,2]; print Dumper (\%h);