use strict; use warnings; use 5.010; my $breadsIter = do { my $idx = 0; my @breads = qw{ w r i f i r w f }; sub { $idx = 0 if $idx > $#breads; return $breads[ $idx ++ ]; }; }; my @numbers = map { ( $_ ) x 3 } 4, 7, 11, 14; my $finalStr = join q{ }, map { $breadsIter->(), $_, $breadsIter->() } @numbers; say $finalStr; #### w 4 r i 4 f i 4 r w 7 f w 7 r i 7 f i 11 r w 11 f w 11 r i 14 f i 14 r w 14 f