use strict; use warnings; use 5.016; use Data::Dumper; my @array_of_hashes = { 'opt' => { 'step820' => '0', 'step190' => '0', 'step124' => '0', 'step127' => '0', 'step410' => '0', 'step015' => '2', 'step130' => '1', 'step013' => '0', 'step715' => '0', 'step540' => '0', 'step800' => '5', 'step135' => '0', 'step003' => '0', 'step455' => '0', } }; say Dumper @array_of_hashes; foreach my $step_number ('step001' .. 'step820') { next if (not defined $array_of_hashes[0]{opt}{$step_number}); say $step_number . " = " . $array_of_hashes[0]{opt}{$step_number}; }