Что такое функция CORE: match (opcode) в профилировании Perl?

Раньше я писал некоторые утилиты на Perl, а сейчас переписываю их, чтобы добавить новые / лучшие функции. Однако кажется, что дела идут намного медленнее, чем в исходных утилитах, поэтому я решил запустить одну из них с профилировщиком NYTProf. Кстати, отличный профилировщик, все еще пытаюсь разобраться во всех его полезных функциях.

Так или иначе, оказывается, что 93% времени моей программы тратится на вызовы подпрограммы GeneModel::CORE:match (opcode), и я понятия не имею, что это такое. Большинство обращений Google указывают на профили NYTProf, опубликованные другими. Я действительно написал GeneModel класс / пакет, но я не знаю, что это за подпрограмма, почему она вызывалась так много раз или почему это занимает так много времени. Любые идеи?


person Daniel Standage    schedule 26.10.2010    source источник


Ответы (2)


CORE:match - это вызов регулярного выражения - в данном случае в вашем GeneModel пакете.

Например, если мы профилируем этот скрипт, Devel :: NYTProf сообщит о 1000 звонках на Foo::CORE:match .

use strict;
use warnings;

package Foo;
my $s = 'foo foo';
$s =~ /foo/ for 1 .. 1000;
person FMc    schedule 26.10.2010

Perl скомпилирован по кодам операций. Оператор match приводит к совпадению кода операции.

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

Это не подпрограмма, а просто представленная таким образом, поскольку профилирование кода операции является недавним дополнением, и пользовательский интерфейс еще не был переработан с учетом этого. Проще говоря, профилировщик сообщает вам, что большая часть времени тратится на движок регулярных выражений.

person daxim    schedule 26.10.2010