my @uids = ....; # List of used UIDs my %uids; @uids{@uids} = (); my $uid = 1001; {$uid++, redo if exist $uids{$uid}} say "First unused uid: $uid"; #### my @uids = ....; # List of sorted uids my $uid = 1001; for (my $i = 0; $i < @uids; $i++) { next if $uids[$i] < $uid; last unless $uids[$i] == $uid; $uid++; } say "First unused uid: $uid";