使用嵌套数组操作实现算法通常很有用。例如,要查找从每个给定字符开始的列表中的单词数量,您可以在Python中执行以下操作:
>>> a = ["foo","bar","baz"] >>> map(lambda c: len(filter(lambda w: w.startswith(c),a)),('a','b','c','d','e','f')) [0,2,1]
在表达式w.startswith(c)中,区分两个循环迭代变量w和c是很简单的,因为它们具有不同的名称。
在Perl中,我想做这样的事情:
@a = ("foo","baz"); map length(grep $_ =~ /^$_/,@a),'f')
然而,这个明显的问题是$ _仅指最内层的grep迭代变量(适用于左侧的$ _),而不是外部映射(适用于/ ^ $ _ /)的变量。在Perl中避免这个问题的惯用方法是什么?
解决方法
只需分配给局部变量:
@a = qw(foo bar baz); map {my $ch = $_; scalar grep $_ =~ /^$ch/,@a} qw(a b c d e f)