#!/usr/bin/perl use strict; use warnings; use Data::Dump 'pp'; use File::Basename; my $data_href = { 'account' => 'result', 'process' => 'data', 'numbers' => 'values', 'names' => 'circle', }; my %hrefdata = reverse %$data_href; my @files = grep { -f } glob( 'data/*.txt' ); =code # content of @files ( "dir/result_2016-04-05.txt", "dir/data_2016-04-05.txt", "dir/values_2016-04-05.txt", "dir/circle_2016-04-05.txt", ) =cut foreach my $file (@files) { my $filename = basename($file); # it should be called 4 times here if (exists $hrefdata{$filename}){ doresults( $filename, $hrefdata{$filename} ); } else { print "NOT EXISTS $filename\n"; } } sub doresults { my ($filename, $recs ) = @_; print "\n $filename = $recs\n"; }