In my List :: Gen module, I implemented many of these functions (and even Haskell-like lazy ones)
use List::Gen qw(zip reduce); my @list = zip [1 .. 4], ['a' .. 'd']; my $str = reduce {$a . $b} @list; say $str;
Or using the glob function to build ranges:
use List::Gen 'glob'; say <1 .. 4>->zip(<a .. d>)->reduce('$a.$b');
Using ->reduce('.') Or ->reduce(sub {$a . $b}) also works.
Or if you play golf:
say <[.]>->(<1..4>|<a..d>);
Or for Haskell versions, see List :: Gen :: Haskell
source share