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

Dan*_*age 4 perl profiling subroutine

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

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

FMc*_*FMc 13

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

例如,如果我们分析此脚本,Devel :: NYTProf会报告1000次调用Foo::CORE:match.

use strict;
use warnings;

package Foo;
my $s = 'foo foo';
$s =~ /foo/ for 1 .. 1000;
Run Code Online (Sandbox Code Playgroud)


dax*_*xim 7

Perl被编译为操作码.该mATCH操作导致匹配操作码.

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

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