Метод set_visible_func
отфильтрованного хранилища должен получить подчиненную ссылку в качестве первого аргумента, но вы не передаете здесь вспомогательную ссылку:
$filtered_store->set_visible_func(get_end_products, $unfiltered_store);
Вместо этого будет вызывать подпрограмма get_end_products
, а затем передать свое возвращаемое значение (которое не является вспомогательной ссылкой).Чтобы исправить это, добавьте оператор ссылки \&
перед именем:
$filtered_store->set_visible_func(\&get_end_products, $unfiltered_store);
По поводу вашего другого вопроса в комментариях: Согласно документации передан параметр пользовательских данныхкак третий параметр для get_end_products
, поэтому вы должны определить его следующим образом:
sub get_end_products {
my ($model, $iter, $user_data) = @_;
# Do something with $user_data
return TRUE;
}
Если по какой-то причине $unfiltered_store
не передан в get_end_products
, вы можетепопробуйте вместо этого передать анонимный sub
, например:
$filtered_store->set_visible_func(
sub { get_end_products( $unfiltered_store) });