I've modified generate_md5sum to look like this ...
sub generate_md5sum
{
my ($fname) = @_;
my $sum = "file-not-readable ";
my $o_md5 = Digest::MD5->new;
my $fh = IO::File->new;
if ( open( $fh, "+<", $fname ) )
{
if ( flock( $fh, LOCK_EX | LOCK_NB ) )
{
binmode($fh);
$sum = $o_md5->addfile($fh)->hexdigest();
flock( $fh, LOCK_UN );
close $fh;
if ($b_dups)
{
$h_sums ||= {};
my $a_files = $h_sums->{$sum} ||= [];
push @$a_files, $fname;
}
}
}
return $sum;
}
Which allows the script to continue over locked or unreadable files.
Is this a good solution to this problem ?