我正在生成20个数字然后我正在改变它
perl -e 'foreach(1..20){print ",$_ "} '
| perl -MList::Util=shuffle -F',' -lane 'print shuffle @F'
,输出为: -
19 15 11 9 8 13 18 4 2 7 5 20 10 14 3 16 1 17 6 12
现在我希望输出像这样: -
19 15 11 9 8 13 18 4 2 7 5 20 ...
任何帮助将不胜感激
答案 0 :(得分:3)
在命令行中的几个步骤中执行此操作是很奇怪的。你可以在一个程序中完成它。
use strict;
use warnings;
use List::Util 'shuffle';
my $count = 1;
foreach my $i ( shuffle 1 .. 20) {
print "$i ";
print "\n\n" unless $count++ % 4;
}
直接将1到20的列表混洗,然后打印每个项目,但每四个后打印两个换行符。 %
是模运算符,它将除法的剩余部分返回4.因此,只要$count
可被4整除,它就会返回0,并且print
会启动。命令行就像这样:
$ perl -MList::Util=shuffle -e '$c=0; for (shuffle 1..20) { print"$_ "; print "\n\n" unless $c++%4}'
这是输出:
11 20 8 17
10 18 19 6
1 14 7 5
13 16 4 3
9 2 15 12
答案 1 :(得分:3)
您也可以使用splice
来调整shuffle
列表的结果,如果您不想编写明确的计数器,请按照这种方式打印。像这样:
perl -MList::Util=shuffle -e '@list=shuffle(1..20); while (@ret_line = splice(@list, 0, 4)) {print "@ret_line\n\n"}'
答案 2 :(得分:0)
我将这些数字放入一个数组中并使用splice
以四个为一组删除它们:
use strict;
use warnings 'all'
use List::Util 'shuffle';
my @nums = shuffle 1 .. 20;
print join(" ", splice @nums, 0, 4), "\n\n" while @nums;