如何使用Perl检查和删除符号链接(如果存在)?

时间:2012-01-31 03:31:06

标签: perl

if (-e "$ENV{MYHOME}/link") {
    system("rm $ENV{MYHOME}/link");
}

这是用于检查符号链接是否存在的代码,如果存在则将其删除。

我正在跟踪此代码无效的错误。到目前为止我还没弄清楚,但是发生的事情是这段代码无法删除符号链接,从而导致“文件存在”错误。

我想检查这种技术是否存在一些根本性缺陷?我还读到了http://perldoc.perl.org/functions/unlink.html,但是想知道是否由于某种原因不推荐当前的方法?

3 个答案:

答案 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:$!";
    }
}