sub foo { my ($tmp, @list1, @list2, %vals) = ('aaaaa'); @list1 = generate_list1(); @list2 = generate_list2(); if (@list1 > @list2) { push @list2, $tmp++ for 1..@list1-@list2; } else { push @list1, $tmp++ for 1..@list2-@list1; } @vals{@list1} = @list2; return %vals; } my %tmp = foo(); my @list1 = sort grep !/^aaa/, keys %tmp; my @list2 = sort grep !/^aaa/, values %tmp;