#!/usr/bin/perl use strict; use warnings; use Data::Dump 'pp'; use Data::Dumper; my $data_href = { 'account' => 'result.txt', 'process' => 'data.txt', 'numbers' => 'values.txt', 'names' => 'circle.txt', }; my @files = grep { -f } glob( 'data/*.txt' ); =code # content of @files ( "dir/result.txt", "dir/data.txt", "dir/values.txt", "dir/circle.txt", ) =cut my %hrefdata = reverse %$data_href; my %fields = (); foreach my $file (@files) { my $filename = $file; # get just the filename $filename =~ s/(.*?)\/([^\/]+)$/$2/ig; # it should be called 4 times here doresults( $filename, $hrefdata{$filename} ) if exists $hrefdata{$filename}; } sub doresults { my ($filename, $recs ) = @_; print "\n $filename = $recs\n"; }