如果文件不存在,则从目录中删除文件时发出 Perl 警告



我正在尝试从目录中删除旧的日志文件。

这里的逻辑是,如果 LOG 目录不存在,请创建它;否则从之前创建的 LOG 目录中删除文件。

...
use autodie;
my $logpath = "/home/Vinod/Test/LOG/";
if ( !-d $logpath ){
make_path $logpath or die "Failed to create path: $logpath";
} else {
unlink glob "$logpath/*.log";
}
...

因此,当目录已经创建并且为空时,我得到以下警告 -

Can't unlink():  at script.pl line 41

当目录已存在且为空时,如何避免此警告消息。 蒂亚。

最简单的方法是替换

unlink glob "$logpath/*.log";

my @files = glob "$logpath/*.log";
unlink @files if @files;

您使用的是旧版本的自动模具模块。升级它以避免此错误。

$ perl -e'use autodie; unlink "nonexistent.*"; CORE::say "ok"'
Can't unlink():  at -e line 1
$ cpan autodie
...
TODDR/autodie-2.32.tar.gz
/usr/bin/make install  -- OK
$ perl -e'use autodie; unlink "nonexistent.*"; CORE::say "ok"'
ok

注释autodie模块。要创建目录,请使用mkdir,要删除目录,请使用rmtree。见下文编码

use strict;
use warnings;
use File::Slurp;
use IO::All;
use File::Path;
use Win32;
#use autodie;
my $logpath = "G:/perl/StackOverflow/LOG";
if (!-d $logpath ){
mkdir($logpath);
} else {
unlink glob "$logpath/*.log";
rmtree $logpath;
} 

最新更新