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”