# First, build the hash of names+size of all the local files my %local_file; for my $filename (@return2) { $filename =~ /^(.*)_(20\d{6})$/ or die "Couldn't find date part in filename '$filename'"; my $remote_name = $1; my $local_size = -s $filename; my $key = join "|", $remote_name, $local_size; $local_file{ $key } = $filename; }; for my $remote_file (@remoteFilelist) { my $remote_size = -s $remote_file; my $key = join "|", $remote_name, $remote_size; if (! exists $local_file{ $key }) { print "$remote_file does not exist locally, or exists locally but with the wrong size.\n"; } else { print "$remote_file exists locally as $local_file{ $key }\n"; } };