Perl分析中的CORE:match(操作码)子例程是什么?

时间:2010-10-26 11:45:20

标签: perl profiling subroutine

我之前在Perl中编写了一些实用程序,我现在正在重写它们以提供一些新的/更好的功能。然而,事情似乎比原始实用程序要慢得多,因此我决定使用NYTProf分析器运行一个。伟大的探测器顺便说一句,仍然试图弄清楚它的所有有用功能。

所以无论如何,事实证明,我的程序时间的93%用于调用GeneModel::CORE:match (opcode)子程序,而我没有知道这是什么。大多数Google点击其他人发布的NYTProf个人资料。我确实编写了GeneModel类/包,但我不知道这个子程序是什么,为什么它被调用了这么多次,或者为什么它需要这么长时间。有什么想法吗?

2 个答案:

答案 0 :(得分:13)

CORE:match是对正则表达式的调用 - 在这种情况下,是在GeneModel包中。

例如,如果我们对此脚本进行了分析,则Devel::NYTProf会向Foo::CORE:match报告1000次调用。

use strict;
use warnings;

package Foo;
my $s = 'foo foo';
$s =~ /foo/ for 1 .. 1000;

答案 1 :(得分:7)

Perl被编译为操作码。 match operator会产生匹配操作码。

> perl -MO=Terse -e'm//'
LISTOP (0x8c4b40) leave [1]
    OP (0x8c4070) enter
    COP (0x8c4780) nextstate
    PMOP (0x8c4260) match

这不是一个子程序,只是表示这种方式,因为操作码分析是最近添加的,并且UI尚未进行彻底检查以将其考虑在内。简单来说,分析器告诉您大部分时间花在正则表达式引擎上。