Этого можно добиться с помощью File :: Temp :
my $fh = File::Temp->new();
my $fname = $fh->filename;
В случае IO :: File получение имени временного файла не представляется возможным. Источник IO :: File показывает, что в объекте хранится только OutputStream:
void
new_tmpfile(packname = "IO::File")
const char * packname
PREINIT:
OutputStream fp; ## it doesn't look like you can get file name out of this
GV *gv;
CODE:
#ifdef PerlIO
fp = PerlIO_tmpfile();
#else
fp = tmpfile();
#endif
...
Насколько я знаю, не все потоки имеют имя файла (например, каналы).