use Date::Manip; use POSIX; @data = ([20070410, 20070415, 20070417], [ 10, 20, 15 ]); for my $i (0 .. $#{$data[0]}-1) { my $lhs = &UnixDate(&ParseDate($data[0][$i]), '%s'); my $rhs = &UnixDate(&ParseDate($data[0][$i+1]), '%s'); my @gap = (); REDO: { if( $lhs < $rhs ) { $lhs += 86400; push @gap, strftime('%Y%m%d', $lhs); redo REDO; } } # I'm not 100% on these splices, be sure to use your brain # untested, etc etc splice @{$data[0]}, $i+1, 0, @gap; splice @{$data[1]}, $i+1, 0, map {0} @gap; }