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;