## pseudo code: my %cache_of_already_read_files; my $sleep_between = 300; while (1){ my @xml = &get_xml_files_names; # opendir, system (ls).. foreach (@xml) { next if exists $cache_of_already_read_files{$_}; $cache_of_already_read_files{$_} = 'found at'.scalar (localtime(time)); &my_copy_to_destination ($cache_of_already_read_files{$_} ); } sleep $sleep_between; }