使用嵌套数组操作实现算法通常很有用.例如,要查找列表中以每个给定字符开头的单词数,您可以在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中避免此问题的惯用方法是什么?
只需分配给局部变量:
@a = qw(foo bar baz); map {my $ch = $_; scalar grep $_ =~ /^$ch/, @a} qw(a b c d e f)