Thanks for the comment, rob_au.
Suppose it were used as follows; I can imagine
that neck and neck races would make it go very slow, but would it fail?
#!/usr/bin/perl -w
use strict;
my $files_like = 'aaa';
for (1..100){
my $next_file = nextuniq($files_like,[map {m/tmp_(\D+)\.txt$/} glob
+('./tmp_*.txt')]);
while (-e "./tmp_$next_file.txt"){
$next_file = nextuniq($next_file,[map {m/tmp_(\D+)\.txt$/} glob(
+'./tmp_*.txt')]);
print "race condition\n";
}
open TEMP,">./tmp_$next_file.txt" or die;
# do something
close TEMP;
}
sub nextuniq{
my ($test_item,$item_list) = @_;
my $new_item;
my $found = 1;
if (! UNIVERSAL::isa( $item_list, "ARRAY" )){
require Carp;
Carp::croak( "Arg 2 must be an array reference\n");
}
while ($found) {
$found = 0;
foreach $new_item (@$item_list) {
if ($new_item eq $test_item) {
$test_item++;
$found = 1;
}
}
}
$new_item = $test_item;
$new_item;
}
If it would fail, can it be written so that it can't fail?
mkmcconn