当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在Perl中区分嵌套列表运算符中的$_?》经验,为你挑选了1个好方法。

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



1> Hynek -Pichi..:

只需分配给局部变量:

@a = qw(foo bar baz);
map {my $ch = $_; scalar grep $_ =~ /^$ch/, @a} qw(a b c d e f)

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有