Я пишу программу WxPerl и вместо
$panel->SetDropTarget( MyTextDropTarget->new($panel) );
Я написал
$panel->SetDropTarget->( MyTextDropTarget->new($panel) );
и Perl не жаловался. (Perl вызвал некоторую функцию с некоторыми аргументами, и скрипт выдал ошибку с сообщением об ошибке:
Использование: Wx :: Window :: SetDropTarget (THIS, target) в строке ./x.pl 230.
Мне любопытно, как Perl проанализировал «неправильную» версию.
Добавлено редактирование:
Хорошо, так что если $ x = \ & some_function, тогда я понимаю, почему
$x->($arg1, $arg2, ...)
вызывает some_function ($ arg1, $ arg2, .....).
Пример Рунрига - одна из возможностей, но я вполне уверен, что:
1) $ panel содержит ссылку на благословенный объект, а не на строку.
2) SetDropTarget - это метод (в базовом классе) $ panel.
Из сообщения об ошибке мы можем предположить, что SetDropTarget () вызывается. Если пример runrig все еще применяется здесь (и я предполагаю, что это так), то даже несмотря на то, что SetDropTarget не сопровождается скобками, то есть у меня
$panel->SetDropTarget->
вместо
$panel->SetDropTarget()->
Perl все еще вызывает SetDropTarget? (который проверяет количество и тип своих аргументов, а затем фатально жалуется во время выполнения). Это то, что происходит?