Я создаю приложение на Perl, которое опирается на Moose. Одной из задач, которую должен выполнить объект Moose, является использование File :: Find для заполнения атрибута списком файлов. У меня возникли проблемы с выяснением того, как использовать ссылку на код поиска \&wanted
таким образом, чтобы я мог поддерживать доступ к $self
версии объекта Moose.
Пока у меня есть это:
#!/usr/bin/perl
package MyMoose;
use Modern::Perl;
use Moose;
use File::Find;
use FindBin qw($Bin);
### Attribute to hold the file list
has "file_list" => (
is => 'rw',
isa => 'ArrayRef',
default => sub {[]}
);
### Method to populate the file list
sub update_file_list {
my $self = shift;
find(\&wanted, $Bin);
}
### File::Find wanted sub
sub wanted {
### This won't work, but shows what I'd like to do
# my $self = shift;
# ### Do some filtering
# push @{$self->file_list}, $File::Find::name;
}
1;
######################################################################
### Main package to test the object.
package main;
use Data::Dumper;
run_main() unless caller();
sub run_main {
my $m = MyMoose->new();
$m->update_file_list();
print Dumper $m->file_list;
}
Он работает, но, очевидно, не собирает список файлов. Это та часть, которую я пытаюсь выяснить.
Как правильно использовать File :: Find, чтобы он позволял вам иметь доступ к объекту Moose во время обработки?