使用嵌套数组操作来实现算法通常很有用。例如,要查找列表中以每个给定字符开头的单词数,您可以在 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 中避免这个问题的惯用方法是什么?