Часто бывает полезно реализовать алгоритмы, используя операции вложенных массивов. Например, чтобы найти количество слов в списке, начинающемся с каждого заданного символа, вы можете сделать что-то вроде этого в Python:
>>> a = ["foo","bar","baz"]
>>> map(lambda c: len(filter(lambda w: w.startswith(c), a)), ('a','b','c','d','e','f'))
[0, 2, 0, 0, 0, 1]
В выражении w.startswith(c) тривиально различать две итерационные переменные цикла w и c, потому что они имеют разные имена.
В Perl я хотел бы сделать что-то вроде этого:
@a = ("foo", "bar", "baz");
map length(grep $_ =~ /^$_/, @a), ('a','b','c','d','e','f')
Однако очевидная проблема заключается в том, что $_ относится только к самой внутренней переменной grep итерации (подходит для $_ слева), а не к внешнему map (подходит для /^$_/). Каков идиоматический способ избежать этой проблемы в Perl?