File Coverage

lib/Array/Split.pm
Criterion Covered Total %
statement 30 30 100.0
branch 4 4 100.0
condition n/a
subroutine 8 8 100.0
pod 2 2 100.0
total 44 44 100.0


line stmt bran cond sub pod time code
1 1     1   717 use strict;
  1         1  
  1         38  
2 1     1   5 use warnings;
  1         1  
  1         57  
3              
4             package Array::Split;
5              
6             BEGIN {
7 1     1   20 $Array::Split::VERSION = '1.103261';
8             }
9              
10             # ABSTRACT: split an array into sub-arrays
11              
12 1     1   957 use Sub::Exporter::Simple qw( split_by split_into );
  1         14197  
  1         10  
13 1     1   246 use List::Util 'max';
  1         3  
  1         137  
14 1     1   1217 use POSIX 'ceil';
  1         7950  
  1         8  
15              
16             sub split_by {
17 2     2 1 1266 my ( $split_size, @original ) = @_;
18              
19 2         25 $split_size = ceil max( $split_size, 1 );
20              
21 2         4 my @sub_arrays;
22 2         4 for my $element ( @original ) {
23 10 100       21 push @sub_arrays, [] if !@sub_arrays;
24 10 100       9 push @sub_arrays, [] if @{ $sub_arrays[-1] } >= $split_size;
  10         24  
25              
26 10         10 push @{ $sub_arrays[-1] }, $element;
  10         21  
27             }
28              
29 2         11 return @sub_arrays;
30             }
31              
32             sub split_into {
33 1     1 1 1225 my ( $count, @original ) = @_;
34              
35 1         3 $count = max( $count, 1 );
36              
37 1         6 my $size = ceil @original / $count;
38              
39 1         16 return split_by( $size, @original );
40             }
41              
42             1;
43              
44             __END__