Perl:有没有办法以编程方式设置文件测试运算符?(即-X)

con*_*con 3 perl

我经常做复杂的文件/目录/符号链接测试,并且正在编写一个子程序来这样做。

例如,而不是

if (-x $file)

my $test = '-x';
if ($x $file)
Run Code Online (Sandbox Code Playgroud)

我可以改变$x-f -r -e或什么的。

我已经彻底阅读了文件测试文档,https://perldoc.perl.org/functions/-X

并且似乎没有任何技巧可以做到这一点。

我已经阅读了File::Find https://perldoc.perl.org/File::Find但我不想在每次搜索时都编写一个单独的子程序,这会使代码变得非常丑陋和冗长。

有什么我错过的东西或任何技巧吗?

Håk*_*and 7

这是使用调度表的另一种方法:

my $file = 'test.txt';
my %ftest = (
    '-x' => sub {-x $_[0]},
    '-f' => sub {-f $_[0]}
);
my $test = '-x';
if ($ftest{$test}->($file)) {
    say "Executable";
}
else {
    say "Not executable";
}
Run Code Online (Sandbox Code Playgroud)

  • 您甚至可以使用 eval 构建调度表。`my %ftest = map { $_ => eval "sub { $_ shift }" } qw( -x -f -d -e -z -s );` (2认同)