您可以使用File :: Temp实现此目的:
my $fh = File::Temp->new();
my $fname = $fh->filename;
Run Code Online (Sandbox Code Playgroud)
如果是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
...
Run Code Online (Sandbox Code Playgroud)
据我所知,并非所有流都有与之关联的文件名(例如管道).