我的目标是取一系列字母并将其切割成" 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。
答案 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
终止。