Perlの配列をn個ずつの配列に分割する

splice して push する。破壊的なので注意。

use strict;
use warnings;

sub chunk {
    my $ary = shift @_;
    my $n = shift @_;
    my $result = [];

    while (@$ary) {
        my @s = splice(@$ary, 0, $n);
        push(@$result, \@s);
    }

    return $result;
}

my $array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

print("array:", @$array, "\n");

my $chunked = chunk($array, 3);
foreach my $c (@$chunked) {
    print("chunk:", @$c);
    print("\n");
}

print("array:", @$array, "\n");
^o^ > perl chunk.pl
array:0123456789
chunk:012
chunk:345
chunk:678
chunk:9
array:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください