#! perl use strict; use warnings; use 5.010; use Data::Dumper; # brings Dumper for Checking # find_files( "/dirA" => "extA", "/dirB" => "extB" ); # extensions without dot sub find_newer_files { my ( $dirA, $extA, $dirB, $extB ) = @_; # read files and their mtime from dirA into a hash (fname => mtime) chdir $dirA or die "chdir($dirA) failed: $!"; my %files_in_A = map { $_ => (stat $_)[9] } glob("*.$extA"); # read files and their mtime from dirB into a hash (fname => mtime) chdir $dirB or die "chdir($dirB) failed: $!"; my %files_in_B = map { $_ => (stat $_)[9] } glob("*.$extB"); # for each found file in dirA for my $fileA ( keys %files_in_A ) { # replace extension for wanted file in dirB ( my $fileB = $fileA ) =~ s{\.\Q$extA\E$}{.$extB}; warn "$fileA -> $fileB\n" if $ENV{DEBUG}; # if we found a fileB in dirB if ( exists $files_in_B{$fileB} ) { # compare the timestamp; tell us when fileB is older than fileA if ( $files_in_A{$fileA} > $files_in_B{$fileB} ) { say "$fileB is older than $fileA"; } } } warn Data::Dumper->new( [ \%files_in_A, \%files_in_B ], [ '*files_in_A', '*files_in_B' ] )->Dump() if $ENV{DEBUG}; } find_newer_files( "/tmp/A" => "adl", # directory_A => extension_A "/tmp/B" => "adlt", );