Perl 使用file::temp module创建临时文件时,不会删除临时文件

Perl 使用file::temp module创建临时文件时,不会删除临时文件,perl,Perl,退出时,File::Temp模块没有删除文件 我创建了一个临时文件,并将该文件传递给其他函数,在这些函数中该文件被打开进行读写 代码如下: #!/usr/bin/perl use strict ; use warnings ; use Data::Dumper; use File::Temp qw/ tempfile tempdir /; use sigtrap qw(die normal-signals error-signals); sub temp{

退出时,
File::Temp
模块没有删除文件

我创建了一个临时文件,并将该文件传递给其他函数,在这些函数中该文件被打开进行读写

代码如下:

#!/usr/bin/perl  
use strict ;  
use warnings ;  
use Data::Dumper;   
use File::Temp qw/ tempfile tempdir /;  
use sigtrap qw(die normal-signals error-signals);  

sub temp{  
    my $decrypted_file_path = "/home/programming/perl";  
    my $file = new File::Temp(DIR => $decrypted_file_path, SUFFIX => '.tmp',UNLINK=>1)->filename;  
    print Dumper $file;  
    writeFile($file);  
    my @arr = parse($file);  
    return ;  
}  

sub writeFile{  
   my ($file) = @_ ;  
   print $file ;  
   open(my $fh,'>', $file) or die "cannot open : $!";  
   print $fh 'this is test' ;  
   close $fh ;    
}  

sub parse{  
    my ($file) = @_ ;  
    open(my $fh,'<', $file) or die "cannot open : $!";  
    my @arr = <$fh> ;  
    close $fh ;  
    return @arr ;  
}  

temp();  
#/usr/bin/perl
严格使用;
使用警告;
使用数据::转储程序;
使用File::Temp qw/tempfile tempdir/;
使用sigtrap qw(模具正常信号错误信号);
子温度{
我的$decrypted_file_path=“/home/programming/perl”;
my$file=new file::Temp(DIR=>$decrypted_file_path,后缀=>'.tmp',UNLINK=>1)->filename;
打印转储程序$文件;
writeFile($file);
my@arr=parse($file);
返回;
}  
子写文件{
我的($file)=@;
打印$file;
打开(我的$fh,“>”,$file)或死亡“无法打开:$!”;
打印$fh“这是测试”;
收盘价$fh;
}  
子解析{
我的($file)=@;

打开(my$fh),使用选项
CLEANUP=>1

更多信息请参见。

我在5.16.3版上观察到了相同的行为。在同一行中使用
new
filename
对我来说似乎很奇怪。如果我将这两个函数分开,文件将自动删除:

my $tmp = File::Temp->new(DIR => $decrypted_file_path, SUFFIX => '.tmp', UNLINK => 1);
my $file = $tmp->filename();
你用错了方法。 它已经为您提供了一个包含文件句柄和文件名的对象。 如果你这样做

my $filename = new File::Temp(...)->filename;
然后包含filehandle的File::Temp返回的对象将立即被销毁。类似于:

my $file = new File::Temp(...);
my $filename = $file->filename;
undef $file;
因此,它创建一个文件并直接删除它,剩下的只是文件名。然后你自己打开这个文件,而从不考虑删除它

这样使用:

my $temp = File::Temp->new(...);
# is already a filehandle
print $temp $content;
# explicitly remove it, otherwise it will be removed when it falls out of scope
undef $temp;

阅读文档。只创建一个临时目录并使用
CLEANUP=>1
。然后创建文件你需要在这个临时目录中。当你的程序退出时,目录及其所有内容将被自动删除。很好的解释。谢谢!!!还有一个问题,如果使用ctrl+c中断程序,它会自动删除临时文件吗?哦,很抱歉。我对这种方法有另一个问题,我有一些命令写在临时文件中,使临时文件可执行后,当我尝试执行命令:system($temp_file);它显示“Text file busy”