perl - Perl中map或grep的使用

标签 perl

几个月来我一直在全职编写 perl 代码(生物信息学),并且一直在努力提高我的技能。就在今天,我突然意识到我从不使用 map 或 grep。回顾我的代码,我意识到这些工具可以在这里或那里为我节省几行代码,但只是以牺牲 foreach 循环的灵活性为代价。我的问题如下:

除了节省一两行代码之外,您是否遇到过使用 map 或 grep 比 foreach/for 循环带来显着优势的情况?

谢谢你的时间!

最佳答案

Schwartzian Transform将是一个例子:

@sorted = map  { $_->[0] }
          sort { $a->[1] cmp $b->[1] }
          map  { [$_, foo($_)] }
          @unsorted;

你可以用一堆 foreach 来做到这一点。循环,但你必须把它们分开才能弄清楚发生了什么;一旦你看过施瓦兹变换,你就会立即认出这个习语。

总的来说我认为mapgrep好处在于它们允许您清晰紧凑地表达您的意图,而无需语法层。如果您看到 map然后你就知道正在进行某种简单的数据结构转换;如果您看到 grep那么您就知道正在进行一些过滤/选择。你可以用 foreach 来做这一切但是你的代码的意图并不像 map 那样清晰或 grep ;你甚至可以用 if 做这一切和 goto如果您愿意,那么您的意图将被更多的语法和状态跟踪所掩盖。

关于perl - Perl中map或grep的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5574800/

相关文章:

regex - 为什么正则表达式不适用于 Perl 中的全局标识?

perl - 如何循环多个文件,保留基本名称以供进一步处理?

perl - 嵌套函数调用范围和语法

linux - 使 perl 脚本可执行...我可以取消前面的 'perl' 语句吗?

perl - 如何让Perl接受负数作为命令行参数?

Perl循环不打印出字符

perl - 我如何在 Perl 中进行单元测试?

mongodb - Perl MongoDB::Collection 聚合函数的使用示例

linux - 内部调用 Linux 命令并将输出保存到文件的 Perl 脚本?

perl - 在 Perl 中声明循环内部或外部的变量,最佳实践