【问题标题】:How can I distinguish $_ in nested list operators in Perl?如何在 Perl 的嵌套列表运算符中区分 $_?
【发布时间】:2010-10-07 07:36:37
【问题描述】:

使用嵌套数组操作来实现算法通常很有用。例如,要查找列表中以每个给定字符开头的单词数,您可以在 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) 中,区分两个循环迭代变量wc 很简单,因为它们具有不同的名称。

在 Perl 中,我想做这样的事情:

@a = ("foo", "bar", "baz");
map length(grep $_ =~ /^$_/, @a), ('a','b','c','d','e','f')

然而,明显的问题是$_ 仅指代最内层 grep 迭代变量(适用于左侧的$_),而不是外层变量map(适合/^$_/)。在 Perl 中避免这个问题的惯用方法是什么?

【问题讨论】:

    标签: perl arrays map


    【解决方案1】:

    只分配给局部变量:

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

    【讨论】:

    • 太好了,做到了。也感谢您提醒使用标量而不是长度!
    • 太棒了太棒了
    猜你喜欢
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2014-10-15
    • 2012-02-03
    • 2018-03-20
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多