Есть ли способ перегрузить / перехватить вызовы функций на перегруженных объектах в Perl? - PullRequest
3 голосов
/ 11 ноября 2010

Подобно тому, как это возможно с перегруженными операторами, есть ли способ применить какое-то волшебство к переменной, чтобы следующее:

my $magic_var = ...;

some_function($magic_var);

приводило к чему-то вроде этого:

call_function(\&some_function, $magic_var)

Если some_function не было определено, я мог бы просто использовать подпрограмму AUTOLOAD для перехвата вызова, но когда он определен, я не знаю, как перехватить вызов (без чего-либосумасшедший, как вставка оболочек во все сабвуферы вызывающего или временное отмена определения всех сабвуферов).

Еще один способ выразить это: я хотел бы написать use overload sin => \&my_sin;, но иметь sin любую функцию ион вызывает nomethod подобный sub всякий раз, когда перегруженный объект используется в вызове функции.

EDIT:

По популярному запросу причина, по которой я смотрел на это, заключалась в том, что я работаюна Perl5 версии Perl6 независимо от звезды.Однако, после более подробного изучения реализации Perl6, кажется, что она также не имеет отношения к функциям, вызываемым на Whatever, поэтому мне не придется пытаться иметь дело с вызовами функций (только вызовы операторов и методов).

Если кому-то интересно, модуль включен на CPAN: Независимо от .

Обратная связь / Комментарии приветствуются.

1 Ответ

1 голос
/ 11 ноября 2010

Можете ли вы использовать механизм tie ?

...