sub unmerge_list_d { my ( $list_ref, $qty, $pad ) = @_; return unless ref $list_ref eq 'ARRAY'; my $arr; push @$arr, [] for 1 .. $qty; if ( @$list_ref % $qty && @_ > 2) { my $padded = $qty - @$list_ref % $qty ; push @{ $list_ref }, ($pad) x $padded; } LOOP: while (1) { foreach ( @$arr ) { push @{ $_ }, shift @$list_ref; last LOOP unless @$list_ref; } } return @$arr if wantarray; return $arr; }