This kind of black box module?
use v5.12;
use strict;
use warnings;
package MyClass {
use Moo;
has _map => (
is => 'lazy',
builder => sub {
# however you get your list put that here
return {
'file1' => { type => 'file' },
'somedir/file2' => { type => 'file' },
'dir1' => { type => 'dir' },
'somedir/dir2' => { type => 'dir' },
'link1' => { type => 'link', target => 'somedi
+r/file1' },
'link2' => { type => 'link', target => 'otherd
+ir/file3' },
};
},
);
sub files {
my $self = shift;
return [ grep { $self->_map->{$_}{type} eq 'file' } keys %{ $s
+elf->_map } ];
}
sub directories {
my $self = shift;
return [ grep { $self->_map->{$_}{type} eq 'dir' } keys %{ $se
+lf->_map } ];
}
sub links {
my $self = shift;
my @links = grep { $self->_map->{$_}{type} eq 'link' } keys %{
+ $self->_map };
return [ map { { $_ => $self->_map->{$_}{target} } } @links ];
}
};
my $obj = MyClass->new;
say for @{ $obj->directories };
Output:
dir1
somedir/dir2
Hope this helps!
The way forward always starts with a minimal test.