【问题标题】:Case Insensitive Grep?不区分大小写的Grep?
【发布时间】:2014-07-31 00:22:13
【问题描述】:

我在 PERL 中使用这个 grep 语句来查找不重复的名称。谁能告诉我如何使它不区分大小写?我知道我需要使用“i”,但我不确定它的去向。谢谢!

@nondup = grep {$marked{$_}++; $marked{$_} = 1;} @names

【问题讨论】:

    标签: perl grep


    【解决方案1】:

    使用fcPerl 5.16 或更新版本)或lc

    use strict;
    use warnings;
    use feature 'fc';
    
    my @names = qw(apple Apple foo bar baz BaZ bar);
    
    my %seen;
    my @unique = grep {! $seen{fc $_}++} @names;
    
    print "@unique";
    

    输出:

    apple foo bar baz
    

    【讨论】:

    • 您可以在旧版 perl 中使用 fcUnicode::CaseFold 模块 :)
    • 非常感谢您回复@Miller。我认为我们的服务器上有一个非常旧版本的 PERL;我们真的不再使用它了。通过以这种方式使用 lc,我终于让代码工作了。 grep {$marked{lc $_}++; $marked{lc $_} = 1;} 你会碰巧知道如何计算新的非重复数组中的元素数量吗?我尝试了一些事情($#nondup 并将数组值分配给变量),但都没有奏效。但是,我可以打印出名称并查看它是否正确。
    • 以防万一有人看到这个并需要帮助,我最终不得不将数组写入一个新的临时文件,计算行数并返回结果。我想发生了一些奇怪的事情,因为我在 if 语句中。我确信有一种更简单的方法,但这对我有用,并且给了我需要的非重复名称的计数。非常感谢所有帮助过我的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2023-03-25
    • 2012-12-01
    • 2013-03-06
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多