Forum Webscript.Ru
Программирование => Perl => Тема начата: ctax от 19 Июня 2007, 14:20:34
-
Здравствуйте господа.
У меня есть маленький вопрос:
есть функция вида $ref->fun(),
как мне получить ссылку на нее и
тип ссылки должен быть CODE.
В таком виде получаю SCALAR :(((
#!/usr/bin/perl
use strict;
my $ref=[];
bless $ref,\'TEST\';
print ref(\\$ref->fun());
package TEST;
sub fun
{
return 1;
}
Заранее большое мерси!
-
\\&TEST::fun ?
-
Так конечно да, но в случае, когда имя класса не известно, например в функции, которая должна возвратить CODE - ссылку на функцию begin() любого модуля.
sub get_code_ref
{
my $blessed_ref = shift;
return \\$blessed_ref->begin(); # все так же возвращает SCALAR...
}
Надеюсь не запутал.
И еще мысль по-ходу, мне кажется можно сделать так
my $code_ref = sub{$ref->begin()}; # работает
но мне кажется это извращение
что думаете? :)
-
посмотреть в сторону perldoc Alias
-
но во всяком случае это будет замыкание, вы точно уверены что вам нужны будет все эти проблемы?
-
ctax
Вариант 1:
my $obj = new Some::Module;
my $module_name = ref $obj;
my $sub_name = $module_name.\'::fun\';
my $sub_module = \\&$sub_name;
Вариант 2:
my $obj = new Some::Module;
my $sub_module = $obj->can(\'fun\');
P.S. Естественно не забыть сделать проверку на существование метода в объекте, тем же can:
if ($obj->can(\'fun\')) {
...
-
Спасибо большое