#!/usr/bin/perl use constant VAL => 0; use constant IDX => 1; use constant SUM => 2; use strict; use warnings; my @list1 = (1 .. 5); my @list2 = (1 .. 5); my @merge_list = map {[$_, 0, $_ + $list2[0]]} @list1; # Map over smaller list if known while (@merge_list) { my ($min, $index) = ($merge_list[0][SUM], 0); for (1 .. $#merge_list) { ($min, $index) = ($merge_list[$_][SUM], $_) if $merge_list[$_][SUM] < $min; } print "$min\n"; $merge_list[$index][IDX]++; if ($merge_list[$index][IDX] > $#list2) { splice(@merge_list, $index, 1); } else { $merge_list[$index][SUM] = $merge_list[$index][VAL] + $list2[$merge_list[$index][IDX]]; } }