use strict; use warnings; use Data::Dumper; my %hash; my @array_values; my @keys = qw(xx yy zz); @hash{@keys}=([{'key1'=>'ipconfig'}],[{'key2'=>'dir'}]); @array_values = values %hash; my %hash_output; for (@array_values){ for my $element ($_){ for my $element1 ($element->[0]){ for my $result (values %$element1){ my $outcome = `$result`; push @{$hash_output{command}[0]}, $outcome; } } } } print Dumper(\%hash_output);