>> *{$name}=sub { &$c };

VVP> зачем враппер?
VVP> *$name = \&$c;
ну потому что он содержит еще код, а в данном примере этот код не приведен :)

профайлер свой делаю :)

>> но если функция представляет собой константную функцию (например
>> константы в каком-то модуле вроде Errno) то получаем варнинг про
>> попытку переопределения константной функции
>> 
>> Constant subroutine ...
>> 
>> Я ковырялся в поисках директивы которая отменяет этот варнинг, но
>> не нашел варианта. Так же не нашел можно ли по ссылке на функцию определить
>> не константная ли она?
>> 
>> сейчас тупо перехватил варнинг
>> $SIG{__WARN__}=sub { $is_constant=1 if $_[0]=~/^Constant sub/ };

VVP> константные сабы компилятся и их переопределение вызывает некоторые
VVP> "неприятные" для интерпретатора операции.
это понятно, поэтому хочется их как-то отделить от остальных
и не переопределять


>> и после переопределения если $is_constant установлено в true то
>> так вылавливаю константные ф-ции. хотелось бы от этого хака избавиться

VVP> Вообще на мой взгляд делаете что-то странное :)
VVP> Не хотите расписать задачу в более общем виде? Я так думаю есть более
VVP> элегантное решение.

ну обычная задача профайлинга:
проходим по полному списку всех функций
вешаем на них врапперы, измеряем время итп

отсюда сразу растут следующие задачи:
1. одна функция может быть импортирована в кучу пакетов, соответственно
ее надо (желательно) переопределить лишь один раз
2. хорошо бы именно импортированные алиасы отбросить
3. отделить константные функции и их не трогать
4. не конфликтовать с модулями которые сами делают аналогичную работу

--
... mpd is off

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: [email protected] jabber://[email protected]
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment: signature.asc
Description: Digital signature

--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить