#!/usr/bin/perl use strict; use warnings; use Data::Dump 'pp'; use File::Basename; my $data_href = { 'account' => '', 'process' => \&test_pro, 'numbers' => \&test_numb, 'names' => \&test_nam, }; my @keys = keys %$data_href; pp @keys; sub test_pro { return 1;} sub test_numb { return 1;} sub test_nam { return 1;} my %hrefdata = reverse %$data_href; #my @files = grep { -f } glob( 'data/*.txt' ); #=code # content of @files my @files = ( "dir/names_2016-04-05.txt", "dir/account_2016-04-05.txt", "dir/numbers_2016-04-05.txt", "dir/process_2016-04-05.txt", ); #=cut foreach my $file (@files) { my $filename = basename($file); my ($name,$ymd) = split '_',$filename; # The values of @keys should be: =code names account process numbers =cut foreach my $match (@keys) { if($filename =~ /^$match.*/ig) { doresults( $filename, $match ); } } } sub doresults { my ($filename, $recs ) = @_; print "\n $filename = $recs\n"; }