I'll skip the File::Temp speech, everyone else has mentioned. However there is probably a bug in the larger picture of the code here. First, as someone mentioned, there's nothing to keep a directory from existing by that name, the
-f return false. The other is that now that you've got a filename that isn't use, what are you doing with it? There's nothing that guarantees it doesn't get used by another process between the time that you generate it and the time you do something with it. If you are wanting to create a tmp file (without using File::Temp for some reason), then try:
#!/usr/bin/perl
use strict;
use Fcntl;
my $TMPDIR = "/tmp";
my $limit = 99999;
my $md;
do {
my $tmpname = int(rand($limit));
$md = "$TMPDIR/runitout_$tmpname";
} until(sysopen(my $fd, $md, O_CREAT|O_EXCL));
This will loop until it can create the file in question, and the O_EXCL means that the create will fail if that file is already in existence.