use strict; use warnings; my @list = ("a", "bb", "c", "d", "e", "f", "g", "h"); my $chunky = chunky(3, @list); print "Chunky(@list) = \n$chunky\n"; sub chunky { my ($n, $i, $_) = shift; while (\0) { $_ .= (shift or last) . (!@_? $@: chr 32/(++$i % $n? 1: 3)) } $_.$/ } __END__ Chunky(a bb c d e f g h) = a bb c d e f g h