为什么这个awk比perl快得多

时间:2014-03-31 23:37:10

标签: perl

在AWK中:

{
  for (i=1;i<=NF;i++) {
    if ($i in good) g++ ;
    if ($i in bad ) b++ ;
  }
}
Perl中的

while (<>) {
  foreach $word ( split ) { 
    if (exists($good{$word})) { $g++ } ;
    if (exists( $bad{$word})) { $b++ } ;
  }
}

我做错了什么?我认为某些perl会更快。

加载“好”和“坏”哈希不是问题,因为输入比情感词列表大得多。

1 个答案:

答案 0 :(得分:1)

垃圾收集。由split()创建的未命名数组仍然在堆上为每一行创建,并最终被deref'd和GC'd。该数组的每个元素都被复制到$ word,并且$ word本身在范围退出时被解析,最终被GC'd。

awk没有任何废话,因为它不是一种通用语言。 awk脚本通过字段索引,底层字段数组只分配一次并在程序的生命周期中重用(因为这就是awk所做的 - 总是将每一行拆分成单词)。