如何使用每行分隔符打印N个数组元素?

Mar*_*k B 2 perl

我在Perl中有一个数组我希望在每个元素之间使用空格分隔符进行打印,除了每个应该换行符分隔的第10个元素.如果重要的话,元素中没有任何空格.

我已经用for和一个计数器编写了一个函数,但我想知道是否有更好/更短/规范的Perl方式,也许是特殊的连接语法或类似方法.

我的功能来说明:

sub PrintArrayWithNewlines
{
    my $counter = 0;
    my $newlineIndex = shift @_;

    foreach my $item (@_)
    {
        ++$counter;
        print "$item";
        if($counter == $newlineIndex)
        {
            $counter = 0;
            print "\n";
        }
        else
        {
            print " ";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Sin*_*nür 6

您可以使用List :: MoreUtils :: natatime:

use warnings; use strict;

use List::MoreUtils qw( natatime );

my @x = (1 .. 35);

my $it = natatime 10, @x;

while ( my @v = $it->() ) {
    print "@v\n"
}
Run Code Online (Sandbox Code Playgroud)

输出:

C:\Temp> x
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35

  • natatime非常酷.我只是希望我没有把它读成"nata time".纳塔! (2认同)

mob*_*mob 6

我喜欢这样splice的工作:

sub PrintArrayWithNewlines {
    my $n = 10;
    my $delim = " ";
    while (my @x = splice @_, 0, $n) {
        print join($delim, @x), "\n";
    }
}
Run Code Online (Sandbox Code Playgroud)