my $dirpath = 'x/y/z'; my $dh = opendir $dirpath or die $!; map ProcessFile( "$dirpath/$_" ), readdir $dh; closedir $dh; sub ProcessFile { my $SOURCEFILE = shift; ( -f $SOURCEFILE ) or return; # ordinary files only my $TARGETFILE = $SOURCEFILE . '.out'; my $REPORTFILE = $SOURCEFILE . '.rpt'; # ... insert OP code here }