[Moscow.pm] function ref

Nikolay Mishin mi на ya.ru
Чт Дек 29 02:48:41 PST 2011


да у мебя ошибочка в последнем коде

так
sub _create_index{
    my ($fh, $idx_file)=@_;
    print "create index func1\n";
    }
my $index_func_name=\&_create_index;    
&$index_func_name( $fh, $idx_file );

правильно


29.12.2011, 14:16, "Nikolay Mishin" <mi на ya.ru>:
> Митяй, спасибо;)) книжку уже перечитываю 3-й раз,
> особенно после Рефакторинга Фаулера, у них идее пересекаются
>
> $$index_func_name->( $fh, $idx_file );
> здесь у меня лишний доллар
> работает и так
> $index_func_name->( $fh, $idx_file );
> но все-таки так прозрачно, как
> &$index_func_name->( $fh, $idx_file ); !!
>
> хотя так тоже работае, ок,
> тогда ответ
> &$index_func_name->( $fh, $idx_file ); !!
>
> ясно видно, что вызывается функция
>
> 29.12.2011, 15:03, "Dmitry Karpich" <meettya на gmail.com>:
>
>>  Потому что
>>
>>  my $ref_sub1=sub {print 'By '. $_[0] };
>>  sub temop_sub{ print 'Hi '. $_[0] };
>>  my $ref_sub=\&temop_sub; # !!!!! ссылка на sub а не ссылка на ее результат
>>
>>  $ref_sub->(); # так - лучше всего
>>
>>  &{$ref_sub1};
>>
>>  Михаил, у вас же есть подписанная Larry книга, почитайте ее :)
>>
>>  Митяй
>>
>>  On Dec 29, 2011, at 12:48 PM, Nikolay Mishin wrote:
>>>   Hi MoscowPM
>>>
>>>   my $ref_sub1=sub {print 'By '. $_[0] };
>>>   sub temop_sub{ print 'Hi '. $_[0] };
>>>   my $ref_sub=\&temop_sub();
>>>   $$ref_sub;
>>>   &$ref_sub;
>>>   Not a CODE reference at 11_sub_ref.pl line 5.
>>>   &{$ref_sub1};
>>>
>>>   почему так?
>>>   почему я не могу вызывать именованную процедуру
>>>   &{$ref_sub1}; ??
>>>   ведь вызывать ссылку на код с помощью
>>>   & - лучше, чем с помощью $
>>>   здесь явно показывается, что вызывается процедура
>>>
>>>   Спасибо.
>>>   --
>>>   Nikolay Mishin
>>>   --
>>>   Moscow.pm mailing list
>>>   moscow-pm на pm.org | http://moscow.pm.org
>>  --
>>  Moscow.pm mailing list
>>  moscow-pm на pm.org | http://moscow.pm.org
>
> --
> Nikolay Mishin

--
Nikolay Mishin


Подробная информация о списке рассылки Moscow-pm