加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:19:32 所属栏目:大数据 来源:网络整理
导读:使用嵌套数组操作实现算法通常很有用。例如,要查找从每个给定字符开始的列表中的单词数量,您可以在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
使用嵌套数组操作实现算法通常很有用。例如,要查找从每个给定字符开始的列表中的单词数量,您可以在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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读