“条件的行动”和“VAR(条件)行动VAR”之间的区别

时间:2016-02-10 11:59:14

标签: perl

问题

这两个命令处理数据的方式有何不同。

Preexample

这些命令用于创建示例数据

mkdir 1234

touch 1234/123

实施例

use strict;
use warnings;
use File::Path;

opendir my($dh),".";
for my $i (grep{ -d && /^(\d*)_\1/} readdir $dh){
rmtree $i
}

这将删除目录和所有内容。

use strict;
use warnings;
use File::Path;

opendir my($dh),".";
rmtree for grep{ -d && /^1234$/} readdir $dh

这不会删除目录也不会出错

预期行为

将删除两者的目录。

版本

perl, v5.10.0
GNU bash, version 3.2.51

附加

如果我用rmtree替换print命令,则会正确打印所有文件夹。所以这可能与某些命令处理参数的方式有关,以及这些args是如何由不同的类型提供的。

只需要询问任何进一步的信息。

1 个答案:

答案 0 :(得分:3)

rmtree不是内置函数,因此如果没有给出参数,它不会使用$_作为默认参数。您需要在第二个示例中明确传递它。

rmtree $_ for grep{ -d && /^1234$/} readdir $dh;

如果CPAN模块提供适用于$_的功能,它将始终在文档中说明。这不是这里的情况。并非所有Perl的内置插件都能做到这一点。 perlfunc中的文档也会为每个文档明确说明这一点。