如何在Perl的嵌套列表运算符中区分$_?

前端之家收集整理的这篇文章主要介绍了如何在Perl的嵌套列表运算符中区分$_?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用嵌套数组操作实现算法通常很有用。例如,要查找从每个给定字符开始的列表中的单词数量,您可以在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)

猜你在找的Perl相关文章