2010-01-14 37 views

回答

14

splice()功能。

+0

谢谢。它确实有帮助。从PHP转移到Perl不是一件容易的事情:) –

+5

@Antonio:不是一件容易的事,但它确实值得! :) – sebthebert

+0

为什么这不是一件容易的工作? – damog

8

您可以使用数组片段是这样的:

#!/bin/perl -l 

my @array = (1,2,3,4,5,6,7,8,9); 

print join ",", @array[0..2]; 
print join ",", @array[3..5]; 
print join ",", @array[6..$#array]; 
3

要匹配的PHP函数可以使用多种方法:

use strict; 
use warnings; 

use List::MoreUtils qw(natatime part); 

use Data::Dumper; 

my @array = 0..9; 
my $size = 3; 

{ my $i = 0; 
    my @part = part { int($i++/$size) } @array; 
    warn "PART\n"; 
    warn Dumper \@part; 
} 

{ my $iter = natatime($size, @array); 
    my @natatime; 
    while(my @chunk = $iter->()) { 
     push @natatime, \@chunk; 
    } 
    warn "NATATIME\n"; 
    warn Dumper \@natatime; 
} 

{ my @manual; 
    my $i = 0; 

    for(0..$#array) { 
     my $row = int($_/$size); 

     $manual[$row] = [] 
      unless exists $manual[$row]; 

     push @{$manual[$row]}, $array[$_]; 
    } 

    warn "MANUAL:\n"; 
    warn Dumper \@manual; 
} 
2

其中一个更简单的方法是使用List::MoreUtils,要么natatimepart函数。

随着natatime,它创建了一个迭代器,所以这可能不是你想要什么:在列表

my $iter = natatime 3, @orig_list; 

而且每次调用$iter->()回报3项。

然后就是part

my $i  = 0; 
my @groups = part { int($i++/3) } @orig_array; 

如果您想使这更容易,您可以编写自己的功能:chunk_array

sub chunk_array { 
    my $size = shift; 
    my $i = 0; 
    return part { int($i++/$size) } @_; 
} 

你会说它是简单:

my @trios = chunk_array(3, @orig_array);