【问题标题】:How do I force extraction to fail if the destination directory doesn't exist?如果目标目录不存在,如何强制提取失败?
【发布时间】:2016-01-18 18:32:13
【问题描述】:

我正在使用 Perl 5.16.3 和 Archive::Extract

我正在解压一个 zip 文件,但如果目标目录不存在,我希望 Perl 失败(死)。目前以下代码不会失败,但会在提取之前创建目录

use Archive::Extract;
...

my $ae = Archive::Extract->new( archive => $downloadedFile, type => 'zip' );
my $ok = $ae->extract( to => $deployDir ) or die $ae->error;

如果目标目录不存在,我该如何强制执行?

【问题讨论】:

  • 可以使用类似:die "$deployDir does not exist" unless -d $deployDir

标签: perl extract archive


【解决方案1】:

模块中没有任何内容允许您禁用目录的自动创建,因此您只需在 extract 调用之前的单独语句中检查它

-d $deployDir or die {Deployment directory "$deployDir" doesn't exist};

或者您可以使用autodie 并尝试将其作为目录打开。这样,系统将为您生成die 消息。像这样

{
    use autodie;
    opendir my ($dh), $deployDir;
}

这需要 Perl v5.10.1 或更高版本。代码周围的大括号{ ... } 是必需的。它们限制了autodie的范围,并立即再次自动关闭目录句柄

【讨论】:

    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2010-12-04
    相关资源
    最近更新 更多