#!/usr/bin/perl -w use strict; use Data::Dumper; my %hoa1 = ( 'key1' => ["A","B","C","D"], 'key2' => ["A","C","D","B"], 'key3' => ["C","A","D","H"], 'key4' => ["A","B","I","C"], ); my %hoa2 = ( 'key1' => ["A","D"], 'key2' => ["A","B"], 'key3' => ["C","H"], ); my @answ = align_array(%hoa1); print Dumper \@answ; sub align_array { my %hoa = @_; my @AoA; my @keys = sort keys %hoa; foreach my $id ( -1 .. $#keys-1 ) { for ( 0 .. $#{$hoa{$keys[$id]}} ) { #Here I get point No.2 done $AoA[$_][0] = $hoa{$keys[0]}[$_]; # I'm totally stuck here, in attempt to do point No.3 to 7 # How can I evaluate elements of array of varying size # dynamically? if ( $AoA[$_][0] = $hoa{$keys[$id+1]}[$_] ) { $AoA[$_][$_+2] = $hoa{$keys[$id+1]}[$_]; } elsif ( $AoA[$_][0] = $hoa{$keys[$id+3]}[$_] ) { $AoA[$_][$_+2] = $hoa{$keys[$id+3]}[$_]; } else { $AoA[$_+1][$_+2] = "-"; } } } # ----- end foreach ----- return @AoA ; }