#!/usr/bin/perl -w use strict; use Data::Dumper qw(Dumper); my @keys = qw(a b c d e f g h i j); #is longer than my @values = qw(1 2 3 4 5); #this.. my @array = interleave(\@keys, \@values); print Dumper(\@array); #let's see what happens sub interleave { my $array1 = shift; my $array2 = shift; my(@even, @odd); push @even, $_ * 2 for 0..$#$array1; push @odd, $_ * 2 + 1 for 0..$#$array2; my @interleaved; @interleaved[@even, @odd] = (@$array1, @$array2); return wantarray ? @interleaved : \@interleaved; } __END__