#!/usr/bin/perl use strict; use warnings; use Data::Dumper; ... my $res_files = list_dirs($dir,$datanames); sub list_dirs { my @locations = shift; my @fnames = shift; =code # This is after DUMP of the data in here. my @locations = [ '/var/www/allfiles' ]; my @fnames = [ { 'filename' => 'abc122.txt' }, { 'filename' => '333twom.txt' }, { 'filename' => '56test.txt' }, { 'filename' => 't445ok.txt' } ]; =cut my @files; find( { wanted => sub { push @files, $_ unless $_ eq '.' || $_ eq '..' || $_ !~ m/@$fnames->{filename}$/} , no_chdir => 1 }, @locations); print Dumper \@files; return \@files; }