{ id => integer, cleared => boolean, PR => [ { ... }, ... { ... }, ], } #### foreach my $key ( @{ $form->{PR} } ) { #### foreach my $var ( keys %elem ) { if ($var->{id} == $form->{"id"}){ #### #!/usr/bin/env perl -l use strict; use warnings; use Data::Dumper; my $form = { id => 12594, cleared => 1, PR => [ { id => 10368, cleared => 0 }, { id => 12594, cleared => 0 }, ], }; print '*** BEFORE ***'; print Dumper $form; for my $hash_ref (@{$form->{PR}}) { if ($hash_ref->{id} == $form->{id}) { $hash_ref->{cleared} = $form->{cleared}; } } print '*** AFTER ***'; print Dumper $form; #### *** BEFORE *** $VAR1 = { 'cleared' => 1, 'id' => 12594, 'PR' => [ { 'cleared' => 0, 'id' => 10368 }, { 'cleared' => 0, 'id' => 12594 } ] }; *** AFTER *** $VAR1 = { 'cleared' => 1, 'id' => 12594, 'PR' => [ { 'cleared' => 0, 'id' => 10368 }, { 'cleared' => 1, 'id' => 12594 } ] };