将数组拆分为perl中的n个可访问部分?

时间:2017-07-18 05:33:45

标签: perl

我的目标是取一系列字母并将其切割成" n"部分。在这种情况下,每件不超过10个字母。但我希望将这些数组存储到一个数组引用中,我可以在计数器上访问它。

例如,我有以下脚本将英文字母数组分成1个10个字母的数组。但由于英文字母有26个字母,我需要在阵列参考中再访问2个数组。

#!/usr/bin/env perl
#split an array into parts. 
use strict;
use warnings;
use feature 'say';

my @letters = ('A' .. 'Z');
say "These are my letters:";
for(@letters){print "$_  ";}

my @letters_selected = splice(@letters, 0, 10);
say "\nThese are my selected letters:";
for(@letters_selected){print "$_  ";}

输出是这样的: 这些是我的信件:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

这些是我选择的信件:

A B C D E F G H I J

这个小脚本只给我一个10个字母的字母。但我想要所有三个10个字母的字母,所以我想知道如何实现这个:

目标: 有一个名为letters_selected字母的数组引用,其中包含所有字母A - Z.但是......我可以像这样访问所有三个小于或等于10个字母的小块。

  foreach(@{$letters_selected[0]}){say "$_  ";}

返回:A B C D E F G H I J#这是字母表的最初10个元素。

foreach(@{$letters_selected[1]}){say "$_  ";}

返回:K L M N O P Q R S T#之后的10个。

foreach(@{$letters_selected[2]}){say "$_  ";}

返回:U V W X Y Z#之后不会超过10。

1 个答案:

答案 0 :(得分:3)

由于splice 破坏其目标,您可以继续应用

use warnings;
use strict;

my @letters = 'A'..'Z';

my @letter_groups;

push @letter_groups, [ splice @letters, 0, 10 ]  while @letters;

print "@$_\n" for @letter_groups;

@letters为空后。因此,如果您需要它,请复制它并使用它。

每次通过splice删除并返回@letters[ ]中的元素时,都会生成该列表的匿名数组。此引用在push@letter_groups

由于splice占用了尽可能多的元素(如果还有10个),一旦少于10个,splice移除并返回该元素,@letters将被清空,并while终止。