#!/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, }; 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 ( "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 $hrefdata{$name} should be: =code names account process numbers =cut # it should be called 4 times here if (exists $hrefdata{$name}){ doresults( $filename, $hrefdata{$name} ); } else { print "NOT EXISTS $name\n"; } } sub doresults { my ($filename, $recs ) = @_; print "\n $filename = $recs\n"; }