Perlで二つのリストの組み合わせ

Pythonだとmap関数に二つ以上のリストを取れて便利だなーって一寸思ったけど、実は余り便利じゃなかった。

a=['a1', 'a2', 'a3']
b=['b1', 'b2', 'b3']
print map(lambda x,y: x+y, a, b)
['a1b1', 'a2b2', 'a3b3']

こんな感じ。こういうケースってありそうで、あんま無い気がする。

一方で、Perlのmapは配列が一個しかとれない。

@a= qw/a1 a2 a3/;
@b= qw/b1 b2 b3/;
print join(",", map{$_} (@a,@b));
a1,a2,a3,b1,b2,b3

だけど、ちょっとの小細工で同じことができちゃったりする。

@a= qw/a1 a2 a3/;
@b= qw/b1 b2 b3/;
print join(",", map{$_->[0].$_->[1]} map{[$a[$_], $b[$_]]} 0..$#a);
a1b1,a2b2,a3b3

ちなみに、本題のリストの組み合わせはこんな感じ。

@a= qw(a1 a2 a3);
@b= qw(b1 b2 b3);
$p= sub {map{[$_[0], $_]} @{$_[1]}};
@c= map{$p->($_, \@b)} @a;
print join(',', map{$_->[0].$_->[1]} @c);
a1b1,a1b2,a1b3,a2b1,a2b2,a2b3,a3b1,a3b2,a3b3

こういうのになると、きっとPythonも事情は同じになるんじゃないかなーなんて思ったり。
…え?foreachで回しながらpushしていったほうが綺麗?