gpt4 book ai didi

perl - 如何优化检查目录是否存在的 Perl 代码?

转载 作者:行者123 更新时间:2023-12-01 14:02:14 24 4
gpt4 key购买 nike

sub DirectoryExists {

my $param = shift;

# Remove first element of the array
shift @{$param};

# Loop through each directory to see if it exists

foreach my $directory (@{$param}) {

unless (-e $directory && -d $directory) {
return 0;
}
}

# True
return 1;
}

有什么办法可以优化这段代码吗?

有什么好的方法可以优化这段代码吗?

最佳答案

该算法非常有效,因为它停在第一项,但您可能想给出 List::Util::first一试。

use List::Util qw<first>;
#...

return defined first { -e && -d } @$param;

唯一的主要优化是它在 C 层运行。它也是 Perl 中一个非常容易识别的习语,因此尽管看起来像高尔夫,但目的是“说 perl”,而不是高尔夫。

List::MoreUtils::any会给你类似的效果,而且,它更适合你想要表达的内容:你问的是数组中是否有目录。 (尽管有一个提示,堆栈参数传递比构建引用并传递它要快一点到快得多——至少在我的测试中是这样。)

无论如何,这是它的样子:

return any { -e && -d } @$param;

表示如果满足该表达式则返回 true。 any 通常在 C 层运行,如果模块可以加载其 XS 版本。否则它就是“纯 Perl”并且可能与您的运行方式类似。

但是,我很确定您不必同时测试是否存在和目录。我很确定如果文件不存在,它不会被视为目录。所以,你可以把它折叠成一种情况。

关于perl - 如何优化检查目录是否存在的 Perl 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3071438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com