if (-e "$ENV{MYHOME}/link") {
system("rm $ENV{MYHOME}/link");
}
这是用于检查符号链接是否存在的代码,如果存在则将其删除。
我正在跟踪此代码无效的错误。到目前为止我还没弄清楚,但是发生的事情是这段代码无法删除符号链接,从而导致“文件存在”错误。
我想检查这种技术是否存在一些根本性缺陷?我还读到了http://perldoc.perl.org/functions/unlink.html,但是想知道是否由于某种原因不推荐当前的方法?
答案 0 :(得分:22)
只需使用:
if ( -l "$ENV{MYHOME}/link" ) {
unlink "$ENV{MYHOME}/link"
or die "Failed to remove file $ENV{MYHOME}/link: $!\n";
}
如果取消链接失败,它会说明原因。 -l
询问目标是否为链接。 -e
询问文件是否存在。如果你的链接是一个不存在的文件,它将返回false,你的代码将无法删除该链接。
答案 1 :(得分:0)
您的代码将只拥有其运行的用户的权限。符号链接是否可能由另一个用户拥有而且不可写?
此外,$ ENV {MYHOME}总有可能不包含您的想法...
答案 2 :(得分:0)
各个操作系统都有自己的errno.h
。我会使用Errno.pm
来处理每个错误。
use Errno;
use File::Spec;
my $dir = File::Spec->catfile($ENV{MYHOME}, 'link');
if (!unlink $dir) {
if ($! == Errno::ENOENT) {
die "Failed to remove '$dir'. File doesn't exist:$!";
}
}