我正在尝试使用以下代码创建临时文件:
use File::Temp ;
$tmp = File::Temp->new( TEMPLATE => 'tempXXXXX',
DIR => 'mydir',
SUFFIX => '.dat');
Run Code Online (Sandbox Code Playgroud)
这是创建临时文件.由于我的权限问题,其他程序无法写入文件.
所以我只想生成文件名而不创建文件.有什么地方可以做到吗?
Cha*_*ens 10
如果在创建名称的同时未创建文件,则可以在手动创建文件之前创建具有相同名称的文件.如果您需要使用其他进程打开文件,只需先关闭它:
#!/usr/bin/perl
use strict;
use warnings;
use File::Temp;
sub get_temp_filename {
my $fh = File::Temp->new(
TEMPLATE => 'tempXXXXX',
DIR => 'mydir',
SUFFIX => '.dat',
);
return $fh->filename;
}
my $filename = get_temp_filename();
open my $fh, ">", $filename
or die "could not open $filename: $!";
Run Code Online (Sandbox Code Playgroud)
处理权限问题的最佳方法是确保运行这两个程序的用户都在同一个组中.然后,您可以使用chmod更改第一个程序内的权限,以允许第二个程序(或该组中的任何用户)修改该文件:
my $filename = get_temp_filename();
chmod 0660, $filename;
Run Code Online (Sandbox Code Playgroud)
只是为了获得你可以做的临时文件的名称:
#!/usr/bin/perl
use strict;
use warnings;
use 5.10.1;
use File::Temp qw/tempfile/;
my $file;
(undef, $file) = tempfile('tmpXXXXXX', OPEN=>0);
say $file;
Run Code Online (Sandbox Code Playgroud)
但是作为查斯.Owens说,在使用它之前,请注意可以创建相同的名称.